使用C#更新SQL表中的值

时间:2016-06-10 11:41:45

标签: c# sql

我需要将字段QB_STATUS从值R更改为值C。我是在循环中这样做,因为我不能" requery"数据表可能已更改。

我已经构建了要更新的条目列表。代码没有错误并且迭代5次(根据我的idInvoices列表更正)但该字段没有更新。

for (int i = 0; i < idInvoices.Count; i++)
{
    // following command will update one row as ID_Invoice is primary key.  
    // ID_Invoice taken from list previously built in ReadDataToNAVArray
    SqlCommand cmd = new SqlCommand("UPDATE tblINVOICES SET QB_STATUS=@Status WHERE ID_INVOICE = @IDInvoice", myConnection);
    cmd.Parameters.Add("@Status", "C");
    cmd.Parameters.Add("@IDInvoice", idInvoices[i]);

    cmd.Dispose();
}

3 个答案:

答案 0 :(得分:3)

首先,您必须执行查询:ExecuteNonQuery;第二 - 不要在循环中创建命令参数等,只需赋值并执行:

 // Make SQL readable
 String sql =
   @"UPDATE tblINVOICES 
        SET QB_STATUS = @Status 
      WHERE ID_INVOICE = @IDInvoice";

 // wrap IDisposable into "using"
 // do not recreate command in the loop - create it once
 using (SqlCommand cmd = new SqlCommand(sql, myConnection)) {
   cmd.Parameters.Add("@Status", SqlDbType.VarChar); //TODO: check types, please
   cmd.Parameters.Add("@IDInvoice", SqlDbType.Decimal); //TODO: check types, please

   // Assign parameters with their values and execute
   for (int i = 0; i < idInvoices.Count; i++) {
     cmd.Parameters["@Status"].Value = "C";
     cmd.Parameters["@IDInvoice"].Value = idInvoices[i];

     cmd.ExecuteNonQuery();
   }    
 }

答案 1 :(得分:1)

您的命令中缺少 ExecuteNonQuery

for (int i = 0; i < idInvoices.Count; i++)
{
    SqlCommand cmd = new SqlCommand("UPDATE tblINVOICES SET QB_STATUS=@Status WHERE ID_INVOICE = @IDInvoice", myConnection);
    cmd.Parameters.Add("@Status", "C");
    cmd.Parameters.Add("@IDInvoice", idInvoices[i]);
    cmd.ExecuteNonQuery();
    cmd.Dispose();
}

答案 2 :(得分:0)

我认为你错过了cmd.ExecuteNonQuery();

使用sql命令的不同方法的示例:

SqlConnection addConn = new SqlConnection();
            addConn.ConnectionString = Properties.Settings.Default.yourDataBaseConnection;
            addConn.Open();

            SqlCommand addComm = new SqlCommand();
            addComm.Connection = addConn;
            addComm.CommandText = "sql command";
            addComm.ExecuteNonQuery();