2016-06-10 49 views
0

我需要将我的字段QB_STATUS从值R更改为值C。我这样做是因为我无法“重新查询”表格,因为数据可能已经改变。使用C#更新SQL表中的值使用C#

我建立了一个更新条目列表。该代码不会出错,并重复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 [email protected] WHERE ID_INVOICE = @IDInvoice", myConnection); 
    cmd.Parameters.Add("@Status", "C"); 
    cmd.Parameters.Add("@IDInvoice", idInvoices[i]); 

    cmd.Dispose(); 
} 
+1

你忘'cmd.ExecuteNonQuery()'。 –

+1

您还没有调用ExecuteNonQuery方法。 –

+0

我喜欢这个网站。 UPVOTES FOR EVERYBODY !!感谢 – Gavin

回答

1

你缺少的ExecuteNonQuery在你的命令。

for (int i = 0; i < idInvoices.Count; i++) 
{ 
    SqlCommand cmd = new SqlCommand("UPDATE tblINVOICES SET [email protected] WHERE ID_INVOICE = @IDInvoice", myConnection); 
    cmd.Parameters.Add("@Status", "C"); 
    cmd.Parameters.Add("@IDInvoice", idInvoices[i]); 
    cmd.ExecuteNonQuery(); 
    cmd.Dispose(); 
} 
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(); 
    }  
} 
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();