2017-11-09 1 views
0

Ich versuche, eine SQL Server-Datenbank zu aktualisieren und eine Liste von Strings haben, die Sitzplatznummern sindaktualisieren SQL Server-Datenbank eine Liste mit

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

Es sagt immer wieder, dass die Variable @SeatNumber deklariert wurde und nur die Der erste Eintrag in der Liste wird aktualisiert. Irgendwelche Möglichkeiten, wie man das angehen kann?

Update:

Ich legte gerade die foreach-Schleife außerhalb der Verwendung und es funktioniert.

+1

weil Sie @seatnumber jede Iteration Ihrer foreach-Schleife hinzufügen, die die Zeichenfolge .. – BugFinder

Antwort

3

Sie versuchen, eine InList zu machen, aber ein Gleichheitsoperator mit Where SeatNumber = @SeatNumber" zu sagen, wo, wie Sie sollten einen IN Operator wie

Where SeatNumber IN (@SeatNumber) 

Wieder verwenden dies nicht der richtige Weg ist, vielmehr sollten Sie diese InList Werte bevölkern zu ein DataTable und passieren, dass als DbType.Structured statt

2

Sein, weil Sie hinzugefügt haben bereits CommandParameter-SqlCommand und Sie hinzufügen, es wieder in Schleife

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

    } 
} 
0

Ich habe gerade die foreach-Schleife außerhalb der Verwendung platziert und es funktioniert.

0

Sie müssen den SqlCommand-Parameter jedes Mal initiieren. In Ihrem Code verwenden Sie den Befehl SQLCommand, um die Abfrage nur beim ersten Mal auszuführen, und aktualisiert Ihre Tabelle mit dem ersten Element in der Liste. Während der nächsten Iteration, da der sqlcommand immer noch den letzten Wert enthält (Abfrage, um das vorherige Element aus der Liste zu aktualisieren), wird ein Fehler ausgegeben. Der richtige Weg, dies zu tun, ist wie folgt:

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

Sie können eine weitere klare Parameterzeile hinzufügen, um es auszuführen.

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