Maison >base de données >tutoriel mysql >Comment corriger l'erreur « Le nom de la variable « @ » a déjà été déclaré » dans le lot de requête SQL ?
Conflit de noms de variables dans un lot de requêtes SQL
Lors de l'exécution de requêtes SQL, il est crucial de garantir l'unicité des noms de variables dans un lot ou une procédure stockée . L'erreur "Le nom de la variable '@' a déjà été déclaré" indique que plusieurs variables portant le même nom ont été définies.
Pour résoudre ce problème, concentrez-vous sur le bloc de code fourni :
private void btn_lock2_Click(object sender, EventArgs e) { // ... 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.Add(new SqlParameter("@LockState", SqlDbType.NVarChar)).Value = 1; rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar)).Value = txt_desc2.Text; // ... } }
L'erreur réside dans l'ajout répété de paramètres dans la boucle. Déplacez plutôt la création du paramètre en dehors de la boucle :
// Moved outside the loop 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++) { // ... rwd.command.Parameters["@LockState"].Value = 1; rwd.command.Parameters["@card_descr"].Value = txt_desc2.Text; // ... }
Vous pouvez également envisager d'effacer les paramètres dans la boucle :
for (long counter = from; counter <= to; counter++) { rwd.command.Parameters.Clear(); // ... }
En suivant ces recommandations, vous pouvez éliminer l'erreur et garantir l'unicité des noms de variables dans vos requêtes SQL.
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!