2016-06-10 27 views
0

Ich muss mein Feld QB_STATUS von Wert R zu Wert C ändern. Ich mache das in einer Schleife, weil ich die Tabelle nicht "requery" wie Daten möglicherweise geändert haben.Aktualisieren Sie den Wert in der SQL-Tabelle mit C#

Ich habe eine Liste von zu aktualisierenden Einträgen erstellt. Der Code ist nicht fehlerhaft und durchläuft 5 Mal (basierend auf meiner idInvoices-Liste), aber das Feld wird nicht aktualisiert.

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

Sie haben vergessen, 'cmd.ExecuteNonQuery()'. –

+1

Sie haben die ExecuteNonQuery-Methode nicht aufgerufen. –

+0

Ich liebe diese Website. UPVOTES FÜR ALLE !! Danke – Gavin

Antwort

1

Sie vermissen die ExecuteNonQuery in Ihrem Befehl.

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

Zuerst müssen Sie Ihre Abfrage ausführen: ExecuteNonQuery; zweite - nicht schaffen Befehl, Parameter usw. innerhalb der Schleife, nur Werte zuordnen und ausführen:

// 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

Ich glaube, du bist cmd.ExecuteNonQuery(); fehlt.

Ein Beispiel für eine andere Art und Weise SQL-Befehle zu verwenden:

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(); 
Verwandte Themen