【发布时间】:2016-02-10 12:11:19
【问题描述】:
我正在尝试通过使用以下查询和 ado.net ExecuteNonQuery() 方法将多个值作为逗号分隔的字符串传递来从我的 SQL Server 数据库表中删除记录。在这里,我传递了表名、列名和逗号分隔值。
string delQuery = "DELETE FROM " + delTblName +
" WHERE " + delColumnName + " IN (" + toDel+ ")";
如果toDel 中的完整值列表没有问题,则删除过程成功。假设如果外键与任何值发生冲突,则整个语句将被终止,并且不会删除任何记录。
由于toDel 变量中的元素数量很大,我不能使用顺序处理,也不能按照要求使用存储过程。
我需要根据成功的元素进行删除,并从这个方法中返回错误的元素。任何帮助,将不胜感激。
使用参数使用下面的代码
try
{
using (var sc = new SqlConnection(dbConnString))
using (var cmd = sc.CreateCommand())
{
sc.Open();
cmd.CommandText = "DELETE FROM @delTblName WHERE @delColumnName IN ( @valConcat) ";
cmd.Parameters.AddWithValue("@delTblName", tblName);
cmd.Parameters.AddWithValue("@delColumnName", delColumnName);
cmd.Parameters.AddWithValue("@valConcat", nosConcat);
cmd.CommandType = CommandType.Text;
rowsAffected = rowsAffected + cmd.ExecuteNonQuery();
}
}
catch
{
}
收到此错误 - 必须声明表变量“@delTblName”。
【问题讨论】:
-
使用parameterized queries,一切顺利。
-
尝试但出错,因为我想通过将表名也作为参数传递来创建动态查询。我还想从 IN ( toDel) 子句中获取错误值。
-
你能告诉我们参数化的代码和相关的错误信息吗?
-
toDel中大概有多少个元素? -
@Balah - 最多可以有 15k 个元素。
标签: c# sql sql-server