C# とストアド プロシージャを使用して MySQL にパラメータを挿入し、「person カラムを null にすることはできません」エラーを回避するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-23 06:04:37
オリジナル
950 人が閲覧しました

How do I insert parameters into MySQL using C# with stored procedures and  avoid  the

ストアド プロシージャを使用した C# での MySQL へのパラメータの挿入

データベース対話の領域では、新しいレコードを追加するタスクが頻繁に発生します。 C# プログラミング言語と MySQL データベースを使用する場合、データの整合性を確保し、SQL インジェクション攻撃を防ぐために、パラメーターを使用してテーブルにデータを挿入する必要がある状況に遭遇することがあります。

一般的なアプローチの 1 つは、パラメーター コレクションの使用です。 MySqlCommand クラスのを使用して、SQL ステートメントで使用されるパラメーターを定義します。特定のケースでは、room テーブルに person 列と address 列の値を挿入しようとしましたが、person 列を null にすることはできないというエラーが発生しました。

この問題を修正するには、次の値を割り当てる必要があります。コマンドを実行する前にパラメータに値を設定します。これは、パラメーターの型変換を自動的に処理する AddWithValue メソッドを使用するか、パラメーターの型を明示的に指定して Value プロパティを設定することによって実現できます。

AddWithValue メソッドの使用:

// Create a connection to the MySQL database
string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
using (MySqlConnection conn = new MySqlConnection(connString))
{
    conn.Open();

    // Prepare the SQL statement
    using (MySqlCommand comm = conn.CreateCommand())
    {
        comm.CommandText = "INSERT INTO room(person, address) VALUES(@person, @address)";

        // Add parameters using the AddWithValue method
        comm.Parameters.AddWithValue("@person", "MyName");
        comm.Parameters.AddWithValue("@address", "MyAddress");

        // Execute the command to insert the data
        comm.ExecuteNonQuery();
    }

    conn.Close();
}
ログイン後にコピー

パラメータのタイプと値の使用property:

// ... (code as before)

    // Prepare the SQL statement
    using (MySqlCommand comm = conn.CreateCommand())
    {
        comm.CommandText = "INSERT INTO room(person, address) VALUES(@person, @address)";

        // Add parameters with explicit types and set values
        comm.Parameters.Add("@person", MySqlDbType.VarChar).Value = "MyName";
        comm.Parameters.Add("@address", MySqlDbType.VarChar).Value = "MyAddress";

        // Execute the command to insert the data
        comm.ExecuteNonQuery();
    }

    // ... (code as before)
ログイン後にコピー

さらに、別の代替方法は、SQL ステートメントで疑問符 (?) で示される位置パラメータを使用することです:

// ... (code as before)

    // Prepare the SQL statement with positional parameters
    using (MySqlCommand comm = conn.CreateCommand())
    {
        comm.CommandText = "INSERT INTO room(person, address) VALUES(?person, ?address)";

        // Add parameters using positional syntax
        comm.Parameters.Add("?person", MySqlDbType.VarChar).Value = "MyName";
        comm.Parameters.Add("?address", MySqlDbType.VarChar).Value = "MyAddress";

        // Execute the command to insert the data
        comm.ExecuteNonQuery();
    }

    // ... (code as before)
ログイン後にコピー

これらのパラメータ化手法を利用すると、 SQL インジェクションの脆弱性を防ぎながら、MySQL データベースにデータを安全に挿入できます。

以上がC# とストアド プロシージャを使用して MySQL にパラメータを挿入し、「person カラムを null にすることはできません」エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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