ホームページ >データベース >mysql チュートリアル >MySQL での C# プリペアド ステートメントが失敗するのはなぜですか? どうすれば修正できますか?

MySQL での C# プリペアド ステートメントが失敗するのはなぜですか? どうすれば修正できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-16 14:26:03590ブラウズ

Why Are My C# Prepared Statements with MySQL Failing, and How Can I Fix Them?

MySQL を使用した C# でのプリペアド ステートメントの使用法

C# プログラムでプリペアド ステートメントを使用しようとすると、開発者は問題に遭遇する可能性があります。よくある問題の 1 つは、プリペアド ステートメントのコードが通常のステートメントに置き換えられ、実行が成功した場合に発生します。

詳しく調べると、プリペアド ステートメントが正しく構成されていないことが明らかです。プリペアド ステートメントを適切に利用するための重要な手順は次のとおりです。

  1. パラメーター プレースホルダー (@val1 など) を含む目的のクエリを使用して MySqlCommand オブジェクトを作成します。
  2. コマンド オブジェクトにパラメーターを追加します。 AddWithValue メソッドを使用します。
  3. Prepare メソッドを呼び出してコマンドを準備します。この手順により、データベース サーバーが SQL ステートメントを解析して最適化します。

次の例は、修正された Prepared Statement の使用法を示しています。

private void btnLogin_Click(object sender, EventArgs e)
{
    MySqlCommand cmd = MySqlConn.cmd;
    cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username=@val1 AND admin_password=PASSWORD(@val2)", MySqlConn.conn);
    cmd.Parameters.AddWithValue("@val1", tboxUserName.Text);
    cmd.Parameters.AddWithValue("@val2", tboxPassword.Text);
    cmd.Prepare();
    MySqlDataReader res = cmd.ExecuteReader();
    if (!res.HasRows) { MessageBox.Show("Error! "); res.Close(); return; }
    else
    {
        //do something
    }
    res.Close();
}

この改訂されたコードでは、一重引用符が使用されています。クエリ内のパラメータ値を囲む (') は削除されます。さらに、パラメータを追加した後に Prepare メソッドが呼び出されます。これらの手順に従うことで、MySQL を使用した C# プログラムでプリペアド ステートメントを効果的に利用できます。

以上がMySQL での C# プリペアド ステートメントが失敗するのはなぜですか? どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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