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

标签 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 运算符的原因。

谢谢。

最佳答案

参数不是这样工作的。您实际上正在尝试获取 ClientID 等于“210,213”的客户端。嗯,这不是一个数字,所以失败了。

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

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

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

进一步阅读:

关于c# - 将 nvarchar 值转换为数据类型 int 时转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7178548/

相关文章:

.net - 如果在 SqlDataReader 关闭之前我们无法检索输出参数,那么为什么......?

c# - 将此 SQL 语句转换为 LINQ

c# - 如何检测到 Windows VirtualStore 的文件重定向?

c# - AllowTransparency 使过扫描最大化

c# - 找不到另一个 ASP.Net WebAPI 路由

sql - 为什么为使用 ORDER by 的选择打开的游标不反射(reflect)对后续表的更新

mysql - 选择行但优先考虑非 NULL 值

MySQL auto_increment 不递增

c# - 将数据库转换/转换为 C# 的数据集

c# - 使用多个值的一个插入语句填充 ado.net 中的表值参数?