2016-06-10 18 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();