将nvarchar值转换为数据类型int时转换失败

时间:2011-08-24 15:56:28

标签: c# sql ado.net

我在这里做错了什么?

string favorites = "210,213";

sqlCommand.CommandText = "select * from clients (nolock) 
    where Deleted = 0 and ClientID in (@favorites)";
sqlCommand.Parameters.AddWithValue("@favorites", favorites);

另一个注意事项:“210,213”只是一个例子。它可以是任何长度的数字。这就是我使用SQL IN运算符的原因。

感谢。

2 个答案:

答案 0 :(得分:3)

这不是参数的工作原理。您实际上是在尝试将ClientID 等于'210,213'的客户端。嗯,这不是一个数字,所以有一个失败。

如果您的IN列表大小是动态的,不时会发生变化,那么参数化查询和IN子句实际上并不是一致的。

阅读这个问题和答案:Parameterize an SQL IN clause

通常,您必须动态组合SQL查询,始终牢记SQL Injection等问题。

进一步阅读:

答案 1 :(得分:0)

我很确定你需要使用收藏夹字符串生成commandtext。数组没有内置的sql类型。您可以通过确保从整数列表生成收藏夹来保护自己免受SQL攻击。