在将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操作符。

谢谢。

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

参数不是这样工作的。您实际上正在尝试获得客户端,其中ClientID 等于 '210,213'。好吧,这不是一个数字,所以有一个失败。

参数化查询和IN子句实际上不是简单地实现在一起,如果您的IN列表大小是动态的,随时变化。

阅读下面的问答:参数化SQL IN子句

一般来说,你必须动态地组装你的SQL查询,始终牢记SQL注入等问题。

进一步阅读:

  • 这两个查询之间的最佳实践
  • 使用IN从sqlite数据库删除
  • 在SELECT in 中使用Oracle参数的问题
  • 是否可以使用查询参数填充IN关键字

我很确定您将需要生成带有favorites字符串的命令文本。数组没有内置的sql类型。您可以通过确保从整数列表中生成收藏夹来保护自己免受sql攻击。