Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用列表更新SQL Server数据库_C#_Tsql_Dao - Fatal编程技术网

C# 使用列表更新SQL Server数据库

C# 使用列表更新SQL Server数据库,c#,tsql,dao,C#,Tsql,Dao,我正在尝试更新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) {

我正在尝试更新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外部,它就可以工作了

您试图创建一个inlist,但使用了一个相等运算符,表示
Where SeatNumber=@SeatNumber”
Where as,您应该使用
IN
运算符,如

Where SeatNumber IN (@SeatNumber)

同样,这不是正确的方法,相反,您应该将这些inlist值填充到
数据表中,并将其作为
DbType.Structured
传递,而不是您尝试创建一个inlist,但使用一个等式操作符,即
Where SeatNumber=@SeatNumber”
Where as,您应该使用
IN
之类的操作符

Where SeatNumber IN (@SeatNumber)

同样,这不是正确的方法,而是应该将这些inlist值填充到
DataTable
中,并将其作为
DbType.Structured
传递,因为您已经将
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();

  }
}

这是因为您已经将
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();

  }
}

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

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

您每次都需要启动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() }

每次都需要启动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() }

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

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

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

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

因为您在构建字符串的foreach循环中添加了@seatnumber每个元素..因为您在构建字符串的foreach循环中添加了@seatnumber每个元素。。