Maison >base de données >tutoriel mysql >Pourquoi ma requête SQL génère-t-elle une erreur « Nom de variable déjà déclaré » ?
Votre message d'erreur : "Le nom de variable '@' a déjà été déclaré. Noms de variables doit être unique au sein d'un lot de requêtes ou d'une procédure stockée", indique un conflit dans la dénomination des variables dans votre SQL code.
Dans l'extrait de code fourni, le problème survient lorsque vous essayez d'utiliser le même nom de variable, "@LockState", plusieurs fois dans une boucle dans le gestionnaire d'événements "btn_lock2_Click". SQL nécessite des noms de variables uniques dans une requête ou une procédure stockée pour éviter toute confusion et ambiguïté.
Une façon de résoudre le conflit consiste à effacer la collection de paramètres avant chaque itération de boucle. Cela garantit que le même nom de paramètre n'est pas ajouté plusieurs fois à la collection.
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; ...
}
Vous pouvez également définir les paramètres avant la boucle, puis mettre à jour leurs valeurs à chaque itération. Cette approche garantit que les paramètres existent dans la collection avant le début de la boucle, éliminant ainsi le besoin d'effacement.
rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar));
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar));
pour (compteur long = de; compteur <= à; compteur )
{
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; ...
}
En utilisant l'une ou l'autre de ces solutions, vous pouvez vous assurer que vos requêtes SQL ont des noms de variables uniques, évitant ainsi l'erreur « déjà déclarée ».
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!