使用列表更新SQL Server数据库

时间:2017-11-09 08:25:35

标签: c# tsql dao

我尝试更新SQL Server数据库并拥有一个字符串列表,这些字符串是座位号

editTextName = (EditText) view.findViewById(R.id.editTextInformationName);
editTextName.setText("Name here",TextView.BufferType.EDITABLE);

它一直说已经声明了变量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(); } } ,并且只更新了列表中的第一项。如何解决这个问题?

更新:

我只是把foreach循环放在了使用之外,它可以工作。

5 个答案:

答案 0 :(得分:3)

您正在尝试制作一个inlist,但使用等于运算符Where SeatNumber = @SeatNumber",您应该使用IN运算符,如

Where SeatNumber IN (@SeatNumber)

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

答案 1 :(得分: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();

  }
}

答案 2 :(得分:0)

我只是把foreach循环放在了使用之外,它可以工作。

答案 3 :(得分:0)

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

"RNFS.DocumentDirectoryPath"

答案 4 :(得分:0)

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

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();
    }