您好我收到此错误 -
'将数据类型nvarchar转换为bigint'时出错
运行时是代码:
string idString = "1,2,3,4";
string updateSql = "UPDATE DistinctClubcard SET ProcessedYorN = 'Y' " + "WHERE CLUBCARD_NUMBER in (@flag) ";
SqlCommand UpdateCmd = new SqlCommand(updateSql, cn);
UpdateCmd.Parameters.Add(new SqlParameter("@flag", SqlDbType.NVarChar, 2000));
UpdateCmd.Parameters["@flag"].Value = idString ;
UpdateCmd.ExecuteNonQuery();
答案 0 :(得分:6)
这不起作用 - SQL IN (...)
查询需要一个数组的sql参数,它不仅适用于传递单个字符串参数。而是为每个值和一个整数值数组使用单独的参数:
string idString = "1,2,3,4";
var ids = idString.Split(',').Select(x => int.Parse(x)).ToArray();
for(int i =0;i< ids.Length;i++)
{
UpdateCmd.Parameters.Add(new SqlParameter("@flag"+i, SqlDbType.BigInt));
UpdateCmd.Parameters["@flag"+i].Value = ids[i];
}
当然,这也会更改您的查询,您需要考虑参数:
string flags = string.Join(",", ids.Select((s, i) => "@flag" + i));
string updateSql = string.Format("UPDATE DistinctClubcard SET ProcessedYorN = 'Y' WHERE CLUBCARD_NUMBER in ({0})",flags);
答案 1 :(得分:0)
该参数将作为单个值传递给SQL Server,而不是作为查询中的替换。有多种方法可以发送多个值,包括(对于SQL Server 2008)表值参数,或者可能将参数格式化为要在SQL Server端解析的XML。 (我使用过这个解决方案一次,但除非你找不到另一个解决方案,否则我不会推荐它。)
在SO上查看此问题可获得更深入的答案:Passing List<> to SQL Stored Procedure