SQL クエリ バッチ内の変数名の競合
SQL クエリを実行するときは、バッチまたはストアド プロシージャ内の変数名の一意性を確保することが重要です。 。 「変数名 '@' はすでに宣言されています」というエラーは、同じ名前の複数の変数が定義されていることを示します。
これを解決するには、次のコード ブロックに注目してください:
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; // ... } }
間違いはループ内でパラメータを繰り返し追加することにあります。代わりに、パラメータの作成をループの外に移動します:
// 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; // ... }
または、ループ内のパラメータをクリアすることを検討してください:
for (long counter = from; counter <= to; counter++) { rwd.command.Parameters.Clear(); // ... }
これらの推奨事項に従うことで、エラーを排除し、 SQL クエリ内の変数名の一意性。
以上がSQL クエリ バッチでの「変数名 '@' はすでに宣言されています」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。