C# SQL参数问题

C# SQL参数问题,c#,sql-server,asp.net-mvc,ado.net,C#,Sql Server,Asp.net Mvc,Ado.net,这似乎是我的参数名的一个明显的输入错误,但我无法识别它。错误消息是: 必须声明标量变量“@SelectedDepartment” 代码: 我已经调试了代码,可以确认DB连接良好,并且模型具有填充参数的值。我遗漏了什么吗?ADO.NET的一个细微差别是,如果参数值为null,则不会添加参数(至少出于输入目的)。因此,在添加时,您应该检查null并使用DbNull.Value。LasseV.Karlsen在注释中是正确的;未将参数传递给ExecuteDataset(…)方法。这就是我的工作原理: u

这似乎是我的参数名的一个明显的输入错误,但我无法识别它。错误消息是:

必须声明标量变量“@SelectedDepartment”

代码:


我已经调试了代码,可以确认DB连接良好,并且模型具有填充参数的值。我遗漏了什么吗?

ADO.NET的一个细微差别是,如果参数值为
null
,则不会添加参数(至少出于输入目的)。因此,在添加时,您应该检查
null
并使用
DbNull.Value

LasseV.Karlsen在注释中是正确的;未将参数传递给ExecuteDataset(…)方法。这就是我的工作原理:

using (SqlConnection batConnection = new SqlConnection(batConstr))
{
    string actualsQuery = "SELECT * FROM Budget WHERE CostCenter = 
        @SelectedDepartment AND Year = @SelectedYear";
    
    using (SqlCommand actualsCommand = new SqlCommand(actualsQuery, batConnection))
    {
        SqlParameter[] parameters = new SqlParameter[2];
        parameters[0] = new SqlParameter("@SelectedDepartment",
            budgetsActuals.SelectedDepartment);
        parameters[0].Value = budgetsActuals.SelectedDepartment;
        parameters[1] = new SqlParameter("@SelectedYear",
            budgetsActuals.SelectedYear);
        parameters[1].Value = budgetsActuals.SelectedYear;

        batConnection.Open();
        ds = SqlHelper.ExecuteDataset(batConstr, CommandType.Text, actualsQuery,
            parameters);
    }
}

我不熟悉
SqlHelper.ExecuteDataset
,但我没有看到您在调用它时使用SqlCommand。我想您应该将查询的参数传递到ExecuteDataset方法中。如果我没有弄错的话,它应该还有一个参数。另外,我们不知道
SqlHelper.ExecuteDataset
做什么。从外观上看,我假设它是一个静态函数。目前,它对您的构建连接、命令等没有任何帮助。老实说,在这一点上,您可以摆脱该调用,只需使用
DataAdapter
并填充
DataSet
。另一方面,我将在您的类中创建一个helper函数(可能是
Budget
),它利用
SqlHelper
类进行此类调用并返回您需要的数据。完成后,您的连接也应该被处理。
ExecuteDataset(batConnection,CommandType.Text
谢谢@LasseV.Karlsen。我想这就是问题所在。
using (SqlConnection batConnection = new SqlConnection(batConstr))
{
    string actualsQuery = "SELECT * FROM Budget WHERE CostCenter = 
        @SelectedDepartment AND Year = @SelectedYear";
    
    using (SqlCommand actualsCommand = new SqlCommand(actualsQuery, batConnection))
    {
        SqlParameter[] parameters = new SqlParameter[2];
        parameters[0] = new SqlParameter("@SelectedDepartment",
            budgetsActuals.SelectedDepartment);
        parameters[0].Value = budgetsActuals.SelectedDepartment;
        parameters[1] = new SqlParameter("@SelectedYear",
            budgetsActuals.SelectedYear);
        parameters[1].Value = budgetsActuals.SelectedYear;

        batConnection.Open();
        ds = SqlHelper.ExecuteDataset(batConstr, CommandType.Text, actualsQuery,
            parameters);
    }
}