ホームページ > データベース > mysql チュートリアル > SQL クエリ バッチでの「変数名 '@' はすでに宣言されています」エラーを修正する方法

SQL クエリ バッチでの「変数名 '@' はすでに宣言されています」エラーを修正する方法

Susan Sarandon
リリース: 2025-01-01 08:24:11
オリジナル
714 人が閲覧しました

How to Fix

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート