使用列表更新 SQL Server 数据库

Posted

技术标签:

【中文标题】使用列表更新 SQL Server 数据库【英文标题】:Update SQL Server database using a list 【发布时间】:2018-04-22 04:02:00 【问题描述】:

我正在尝试更新 SQL Server 数据库并有一个座位号字符串列表

string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber");

using (SqlCommand cmd = new SqlCommand(strQuery, con)) 
    con.Open();

    foreach (var item in list) 
       string test = item.ToString();
       test = test.Replace('"', ' ').Trim();

       cmd.Parameters.AddWithValue("@SeatNumber", test);
       cmd.ExecuteNonQuery();
    

它一直说变量@SeatNumber 已被声明并且仅更新列表中的第一项。有什么方法可以解决这个问题?

更新:

我只是将 foreach 循环放在了 using 之外,它就可以工作了。

【问题讨论】:

因为您在构建字符串的 foreach 循环的每个迭代中都添加了 @seatnumber .. 【参考方案1】:

您正在尝试创建一个 inlist,但使用了一个相等运算符,说 Where SeatNumber = @SeatNumber",而您应该使用一个 IN 运算符,如

Where SeatNumber IN (@SeatNumber)

同样,这不是正确的方法,您应该将这些 inlist 值填充到 DataTable 并将其作为 DbType.Structured 传递

【讨论】:

【参考方案2】:

这是因为您已经将CommandParameter 添加到SqlCommand 并且您再次将其添加到循环中

string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber");
con.Open();
foreach (var item in list) 
  using (SqlCommand cmd = new SqlCommand(strQuery, con)) 
    string test = item.ToString();
    test = test.Replace('"', ' ').Trim();
    cmd.Parameters.AddWithValue("@SeatNumber", test);
    cmd.ExecuteNonQuery();

  

【讨论】:

【参考方案3】:

每次都需要启动SqlCommand参数。在您的代码中,您使用 SQLCommand 仅第一次执行查询,它会使用列表中的第一项更新您的表。在下一次迭代期间,由于 sqlcommand 仍然保留最后一个值(查询以更新列表中的上一项),它会引发错误。正确的做法如下:

try
    string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber");
    con.Open();
    foreach (var item in list) 
      using (SqlCommand cmd = new SqlCommand(strQuery, con)) 
    string test = item.ToString();
    test = test.Replace('"', ' ').Trim();
    cmd.Parameters.AddWithValue("@SeatNumber", test);
    cmd.ExecuteNonQuery();

      
    

finally con.Close() 

【讨论】:

【参考方案4】:

您可以添加一个更清晰的参数行以使其运行。

string strQuery = ("Update tblTransactionItems set selected = 'T' Where SeatNumber = @SeatNumber");

    using (SqlCommand cmd = new SqlCommand(strQuery, con)) 
    con.Open();
    foreach (var item in list) 
        string test = item.ToString();
        test = test.Replace('"', ' ').Trim();
        cmd.Parameters.AddWithValue("@SeatNumber", test);
        cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
    

【讨论】:

【参考方案5】:

我只是将 foreach 循环放在了 using 之外,它就可以工作了。

【讨论】:

以上是关于使用列表更新 SQL Server 数据库的主要内容,如果未能解决你的问题,请参考以下文章

从SQL Server将数据导入SharePoint 2010

将本地数据插入 SQL Server 临时表

从 sql server 获取选定的值到 php 中的下拉列表

VB.NET 使用 SQL Server CE 一次多选

使用 SqlDataAdapter 更新 SQL Server 数据库

sql server有批量插入和批量更新的sql语句吗