在SqlCommand中删除params

Kat*_*ate 4 c# t-sql ado.net

我使用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中删除.当我使用相同的算法插入或更新数据库时,一切正常.有谁知道这是什么问题?

Mar*_*ell 9

您不能在常规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)