データベース対話の領域では、新しいレコードを追加するタスクが頻繁に発生します。 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 サイトの他の関連記事を参照してください。