Lorsque vous tentez d'exécuter du code SQL, vous pouvez rencontrer l'erreur "Le nom de la variable '@ LockState' a déjà été déclaré. Les noms de variables doivent être uniques dans un lot de requête ou une procédure stockée. Ce problème est dû à l'inclusion de plusieurs instances du même paramètre dans une boucle.
Pour résoudre cette erreur, vous pouvez soit effacer les paramètres après chaque itération de la boucle, soit ajouter les paramètres avant la boucle.
for (long counter = from; counter <= to; counter++) { // Clear parameters before adding new ones rwd.command.Parameters.Clear(); 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; rwd.connection.Open(); rwd.command.ExecuteScalar(); rwd.connection.Close(); }
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; // Assign values to parameters within the loop rwd.command.Parameters["@LockState"].Value = 1; rwd.command.Parameters["@card_descr"].Value = txt_desc2.Text; rwd.connection.Open(); rwd.command.ExecuteScalar(); rwd.connection.Close(); }
En mettant en œuvre l'une ou l'autre de ces solutions, vous pouvez résoudre efficacement le problème de redondance des paramètres et assurer la bonne exécution de votre code 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!