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 ?

Comment corriger l'erreur « Le nom de la variable « @ » a déjà été déclaré » dans le lot de requête SQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-01 08:24:11706parcourir

How to Fix

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn