Heim >Datenbank >MySQL-Tutorial >Warum gibt meine SQL-Abfrage den Fehler „Variablenname bereits deklariert' aus?
Ihre Fehlermeldung: „Der Variablenname '@' wurde bereits deklariert. Variablennamen „muss innerhalb eines Abfragebatches oder einer gespeicherten Prozedur eindeutig sein“ weist auf einen Konflikt in der Variablenbenennung in Ihrem SQL-Code hin.
In der Im bereitgestellten Codeausschnitt tritt das Problem auf, wenn versucht wird, denselben Variablennamen, „@LockState“, mehrmals in einer Schleife innerhalb des Ereignishandlers „btn_lock2_Click“ zu verwenden. SQL erfordert eindeutige Variablennamen innerhalb einer Abfrage oder gespeicherten Prozedur, um Verwirrung und Mehrdeutigkeit zu vermeiden.
Eine Möglichkeit zur Lösung Der Konflikt besteht darin, die Parametersammlung vor jeder Schleifeniteration zu löschen. Dadurch wird sichergestellt, dass derselbe Parametername nicht mehrmals zur Sammlung hinzugefügt wird.
for (long counter = from; counter <= to; counter )
{
rwd.command.Parameters.Clear(); // Clear the parameters collection before adding new parameters string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'"; rwd.command.CommandText = upd; rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar)).Value = 1; rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar)).Value = txt_desc2.Text; ...
}
Alternativ können Sie die Parameter vor der Schleife definieren und ihre Werte dann innerhalb jeder Iteration aktualisieren. Dieser Ansatz stellt sicher, dass die Parameter innerhalb der Sammlung vorhanden sind, bevor die Schleife beginnt, sodass kein Löschen erforderlich ist.
rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar));
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar));
for (long counter = from; counter <= to; counter )
{
string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'"; rwd.command.CommandText = upd; rwd.command.Parameters["@LockState"].Value = 1; rwd.command.Parameters["@card_descr"].Value = txt_desc2.Text; ...
}
Durch die Verwendung einer dieser Lösungen können Sie sicherstellen, dass Ihre SQL-Abfragen eindeutige Variablennamen haben, und so den Fehler „bereits deklariert“ verhindern.
Das obige ist der detaillierte Inhalt vonWarum gibt meine SQL-Abfrage den Fehler „Variablenname bereits deklariert' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!