Heim >Datenbank >MySQL-Tutorial >Warum gibt meine SQL-Abfrage den Fehler „Variablenname bereits deklariert' aus?

Warum gibt meine SQL-Abfrage den Fehler „Variablenname bereits deklariert' aus?

Susan Sarandon
Susan SarandonOriginal
2025-01-03 08:42:39323Durchsuche

Why Does My SQL Query Throw a

Variablennamenskonflikt in SQL-Abfragen

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.

Lösung 1: Parameter nach jeder Schleifeniteration löschen

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;
...

}

Lösung 2: Parameter vorher definieren Schleife

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn