【问题标题】:Delete records with "in" clause using ado.net使用 ado.net 删除带有“in”子句的记录
【发布时间】:2014-10-07 19:32:26
【问题描述】:

以下是代码,我正在尝试使用 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.. 我会收到另一个错误。

【问题讨论】:

    标签: ado.net in-clause


    【解决方案1】:

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

    您也可以使用表值参数将列表传递给存储过程...但您需要将删除语句放入存储过程并在服务器端创建用户定义类型...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-21
      • 2019-03-14
      • 2016-04-24
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      • 2016-01-27
      相关资源
      最近更新 更多