ホームページ >データベース >mysql チュートリアル >C# で MySQL パラメータ化されたクエリが IndexOutOfBoundsException をスローするのはなぜですか?

C# で MySQL パラメータ化されたクエリが IndexOutOfBoundsException をスローするのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-25 17:06:17931ブラウズ

Why Does My MySQL Parameterized Query in C# Throw an IndexOutOfBoundsException?

C# での MySQL のパラメータ化されたクエリ

この質問は、C# で MySQL でパラメータ化されたクエリを使用するときに発生する一般的な問題に対処します。提供されたコードには、問題を引き起こすコードの関連部分が含まれています。

質問:

コード スニペットには、2 つの疑問符 (?) を含むパラメータ化されたクエリが含まれています。パラメータ値のプレースホルダ。ただし、最初のパラメータを追加すると、IndexOutOfBoundsException が発生します。コードの何が問題ですか?

回答:

提供されたコードはパラメータ化されたクエリで MySqlCommand オブジェクトを初期化しますが、プレースホルダーの疑問符の前に「@」が付いていません。 " 文字。MySQL の名前付きパラメータに必要です。修正されたコードは次のとおりです:

private String readCommand = 
             "SELECT LEVEL FROM USERS WHERE VAL_1 = @param_val_1 AND VAL_2 = @param_val_2;";

public bool read(string id)
{
    level = -1;
    MySqlCommand m = new MySqlCommand(readCommand);
    m.Parameters.AddWithValue("@param_val_1", val1);
    m.Parameters.AddWithValue("@param_val_2", val2);
    level = Convert.ToInt32(m.ExecuteScalar());
    return true;
}

この修正されたコードでは:

  • readCommand 文字列は、「@param_name」構文で名前付きパラメータを使用するように変更されます。
  • AddWithValue メソッドを使用してパラメータをコマンドに追加し、パラメータ名がコマンドで指定されたものと一致することを確認します。 query.
  • ExecuteScalar メソッドは、クエリを実行し、単一のスカラー値 (この場合はレベル) を取得するために使用されます。

以上がC# で MySQL パラメータ化されたクエリが IndexOutOfBoundsException をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。