我正在传递一长串employeeId,employeeIdlist并将它们分成一个List.使用此列表我将向查询添加参数.我收到以下错误
{"必须声明标量变量\"@ EmployeeId \"."}
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;
}
Run Code Online (Sandbox Code Playgroud)
在IN之后删除文本
getVersion.CommandText = @"SELECT EmployeeId,Version
FROM [dbo].[EmployeeVersion]
WHERE EmployeeId in (";
Run Code Online (Sandbox Code Playgroud)
然后foreach可以建立完整的参数和文本列表
foreach (var emp in empIds)
{
sb.Append("@EmployeeId" + i.ToString() + ",");
getVersion.Parameters.AddWithValue("@EmployeeId" + i.ToString(), emp);
i++;
}
Run Code Online (Sandbox Code Playgroud)
退出循环后,从StringBuilder中删除最后一个逗号
sb.Length--;
Run Code Online (Sandbox Code Playgroud)
最后,完成附加StringBuilder内容的命令文本,不要忘记IN子句的结束括号.
getVersion.CommandText += sb.ToString() + ")";
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用正确的IN子句和匹配的参数列表运行该命令
| 归档时间: |
|
| 查看次数: |
733 次 |
| 最近记录: |