使用 ado.net 删除带有"in"子句的记录



下面是我试图使用ado.net执行的代码。我做错了什么?

    Trying to delete records using ado.net 
    private const string SqlDeleteMultiple = @"        
    DELETE FROM [Board] 
    WHERE 
    [Id] in (@Ids)
    ";
    public void DeleteMultiple(string items)
        {
            ArgumentValidator.ThrowOnNull("item", items);
            /*   var sbItems = new StringBuilder();
               sbItems.Append("'");
               sbItems.Append(items);
               sbItems.Replace(",", "','");
               sbItems.Append("'");*/

            try
            {
                using (var conn = new SqlConnection(_connectionString))
                {
                    conn.Open();
                    using (var cmd = new SqlCommand( SqlDeleteMultiple,conn))
                    {
                        cmd.Parameters.Add(new SqlParameter("@Ids", SqlDbType.VarChar) {Value = items});
                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception err)
            {
                _logger.Log(LogLevel.Error, err, "Error calling Delete");
                throw err;
            }
        }

将varchar值"9,8"转换为数据类型int时转换失败。如果我将SqlDbType更改为int。我会得到另一个错误。

您的@Ids包含一个值列表,但您只提供了一个SqlParameter。。。为列表中的每个值添加一个SqlParameter,它应该可以

还可以使用表值参数将列表传递给存储过程。。。但是您需要将delete语句放入存储过程中,并在服务器端创建一个用户定义的类型。。。

相关内容

  • 没有找到相关文章

最新更新