SQL コードを実行しようとすると、「変数名 '@」というエラーが発生することがあります。 LockState' はすでに宣言されています。変数名はクエリ バッチまたはストアド プロシージャ内で一意である必要があります。」この問題は、ループ内に同じパラメータの複数のインスタンスが含まれているために発生します。
このエラーを解決するには、ループの各反復後にパラメータをクリアするか、ループの前にパラメータを追加します。
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(); }
これらのソリューションのいずれかを実装すると、パラメーターの冗長性の問題を効果的に解決し、SQL コードを確実に正常に実行できます。
以上が「変数名 '@' はすでに宣言されています」という SQL エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。