我将一长串employeeIds传递给employeeIdlist
,然后将它们分成一个List。使用这个列表,我将参数添加到我的查询中。 我收到以下错误必须在Select命令中声明标量变量
{“必须声明标量变量\” @雇员\“”}
public List<versionInfo> GetVersion(string employeeIdlist)
{
DbHelper helper = new DbHelper();
List<versionInfo> empVerInfo = new List<versionInfo>();
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (SqlCommand getVersion = new SqlCommand())
{
getVersion.Connection = conn;
getVersion.CommandText = @"SELECT EmployeeId,Version
FROM [dbo].[EmployeeVersion]
WHERE EmployeeId in (@EmployeeId)";
getVersion.CommandType = CommandType.Text;
List<int> empIds = employeeIdlist.Split(',').Select(int.Parse).ToList();
StringBuilder sb = new StringBuilder();
int i = 0;
foreach (var emp in empIds)
{
// IN clause
sb.Append("@EmployeeId" + i.ToString() + ",");
// parameter
getVersion.Parameters.AddWithValue("@EmployeeId" + i.ToString(), emp);
i++;
}
// getVersion.Parameters.AddWithValue("@EmployeeId", employeeIdlist);
SqlDataReader rdr = getVersion.ExecuteReader();
while (rdr.Read())
{
versionInfo vi = new versionInfo();
vi.employeeId = helper.GetDb<int>(rdr, "EmployeeId");
vi.version = helper.GetDb<decimal>(rdr, "Version");
empVerInfo.Add(vi);
}
rdr.Close();
}
conn.Close();
}
return empVerInfo;
}
您正在添加多个参数,将您的AddWithValue保留在循环中;使用String.Join连接列表并最终只添加一个参数 – techspider
我建议将sql移入存储过程并声明名为'@ EmployeeId'的输入参数,并且您有一个EmployeeId列表我还会创建一个类型并传递在列表中让数据库处理IN子句你是否熟悉在sql server中创建用户类型..? – MethodMan