C# SQL参数问题
这似乎是我的参数名的一个明显的输入错误,但我无法识别它。错误消息是: 必须声明标量变量“@SelectedDepartment” 代码: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
我已经调试了代码,可以确认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);
}
}