【发布时间】:2015-03-08 20:37:04
【问题描述】:
我正在尝试创建一个DELETE 语句,我将使用IN 子句从基于ID 列表的表中删除一些项目:
DELETE FROM table WHERE id IN (@ids)
使用SqlCommand,我正在执行以下操作来生成IN 参数:
public void DeleteItemsByIds(int[] ids) {
Parameters["ids"] = string.Join(", ", ids);
ExecuteNonQuery(deleteStatement, Parameters);
}
然后我得到一个错误:
将数据类型 varchar 转换为 bigint 时出错
有人知道我该如何解决吗?
谢谢大家!
【问题讨论】:
-
好吧,
IN需要一个 (大概)BIGINT值列表,而您提供的实际上只是 一个字符串 b> ..... 对于 SQL Server 2008 及更高版本,请查看 表值参数 以将多个值传递给 SQL 语句 -
将整个 SQL 语句构造为文本,而不仅仅是包含集,这应该可以。
-
@PieterGeerkens:这是可怕的建议,因为它开启了 SQL 注入 攻击的可能性……说真的 - 不要这样做!
-
看看this SO回答。它是针对存储过程量身定制的,但建议的解决方案适合您的情况。此外,您可能会得到一些提示,将您推向存储过程而不是独立的(动态 sql?)删除语句...
标签: c# sql sql-server