我在这里做错了什么?
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运算符的原因。
感谢。
答案 0 :(得分:3)
这不是参数的工作原理。您实际上是在尝试将ClientID 等于'210,213'的客户端。嗯,这不是一个数字,所以有一个失败。
如果您的IN
列表大小是动态的,不时会发生变化,那么参数化查询和IN
子句实际上并不是一致的。
阅读这个问题和答案:Parameterize an SQL IN clause
通常,您必须动态组合SQL查询,始终牢记SQL Injection等问题。
进一步阅读:
答案 1 :(得分:0)
我很确定你需要使用收藏夹字符串生成commandtext。数组没有内置的sql类型。您可以通过确保从整数列表生成收藏夹来保护自己免受SQL攻击。