我使用ADO.NET从DB中删除一些数据,如下所示:
using (SqlConnection conn = new SqlConnection(_connectionString))
{
try
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("Delete from Table where ID in (@idList);", conn))
{
cmd.Parameters.Add("@idList", System.Data.SqlDbType.VarChar, 100);
cmd.Parameters["@idList"].Value = stratIds;
cmd.CommandTimeout = 0;
cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
//_logger.LogMessage(eLogLevel.ERROR, DateTime.Now, e.ToString());
}
finally
{
conn.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
该代码在没有Exception的情况下执行,但数据未从DB中删除.当我使用相同的算法插入或更新数据库时,一切正常.有谁知道这是什么问题?
您不能在常规TSQL中执行此操作,因为服务器将其@idList
视为恰好包含逗号的单个值.但是,如果使用a List<int>
,则可以使用dapper-dot-net
connection.Execute("delete from Table where ID in @ids", new { ids=listOfIds });
Run Code Online (Sandbox Code Playgroud)
dapper指出你的意思,并产生适当的参数化.
另一种选择是发送一个字符串并编写一个UDF来执行"拆分"操作,然后在查询中使用该UDF:
delete from Table where ID in (select Item from dbo.Split(@ids))
Run Code Online (Sandbox Code Playgroud)