将数据类型nvarchar转换为bigint时出错

时间:2012-02-16 18:10:03

标签: c# asp.net sql-server ado.net

您好我收到此错误 -

  

'将数据类型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();

2 个答案:

答案 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