在将nvarchar值转换为数据类型int时,转换失败
本文关键字:转换 失败 int nvarchar 在将 数据类型 | 更新日期: 2023-09-27 18:06:28
我哪里做错了?
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操作符。
谢谢。
参数不是这样工作的。您实际上正在尝试获得客户端,其中ClientID 等于 '210,213'。好吧,这不是一个数字,所以有一个失败。
参数化查询和IN
子句实际上不是简单地实现在一起,如果您的IN
列表大小是动态的,随时变化。
阅读下面的问答:参数化SQL IN子句
一般来说,你必须动态地组装你的SQL查询,始终牢记SQL注入等问题。
进一步阅读:
- 这两个查询之间的最佳实践
- 使用IN从sqlite数据库删除 在SELECT in 中使用Oracle参数的问题
- 是否可以使用查询参数填充IN关键字
我很确定您将需要生成带有favorites字符串的命令文本。数组没有内置的sql类型。您可以通过确保从整数列表中生成收藏夹来保护自己免受sql攻击。