C# を使用して MySQL にデータを挿入すると、「person カラムを Null にすることはできません」というエラーが発生するのはなぜですか?

Barbara Streisand
リリース: 2024-11-09 08:00:03
オリジナル
346 人が閲覧しました

Why Am I Getting a

MySQL INSERT パラメーターを使用した C#

MySQL INSERT ステートメントでパラメーターを利用することは、データの整合性を維持し、SQL インジェクション攻撃を防ぐための重要な実践です。ただし、コードで問題が発生しました。その解決をお手伝いいたします。

元の問題:

最初のコードでは、次のパラメータを使用して INSERT ステートメントを実行しようとしました:

comm.Parameters.Add("@person", "Myname");
comm.Parameters.Add("@address", "Myaddress");
ログイン後にコピー

しかし、エラー メッセージ「person カラムを null にすることはできません」は、person パラメータの値を設定していないことを示しています。

解決策:

この問題に対処するには、パラメータに値を割り当てる必要があります:

comm.Parameters.Add("@person", MySqlDbType.VarChar).Value = "Myname";
comm.Parameters.Add("@address", MySqlDbType.VarChar).Value = "Myaddress";
ログイン後にコピー

SQL インジェクションの脆弱性:

また、INSERT ステートメントでリテラル文字列を使用しても (例: "INSERT INTO room(person,address) VALUES('Myname', 'Myaddress')") エラーが発生しないとも述べました。ただし、この方法では SQL インジェクション攻撃が発生しやすく、悪意のあるユーザーが入力を操作して任意の SQL コマンドを実行する可能性があります。

代替解決策:

代わりに、以下を使用できます。 AddWithValue メソッド。パラメータ化を自動的に処理し、SQL インジェクションを防止します。

comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");
ログイン後にコピー

疑問符の使用:

もう 1 つのオプションは、疑問符をパラメータのプレースホルダーとして使用することです。例:

comm.CommandText = "INSERT INTO room(person,address) VALUES(?person, ?address)";
comm.Parameters.Add("?person", "Myname");
comm.Parameters.Add("?address", "Myaddress");
ログイン後にコピー

MySqlDbType 列挙型を使用して各パラメータの MySQL データ型を指定していることを確認してください。

インデックスベースのパラメータ:

インデックスベースのパラメーター (例: cmd.Parameters.Add("person", MySqlDbType.VarChar).Value = a;) を使用しようとした試みは無効です。インデックス ベースのアプローチは、パラメーター化されたクエリではなく、ストアド プロシージャ用です。

解決されたコード:

最終的に、コードは次のアプローチを使用して解決されました。

cmd.CommandText = "INSERT INTO room(person,address) VALUES(?person,?address)";
cmd.Parameters.Add("?person", MySqlDbType.VarChar).Value = "myname";
cmd.Parameters.Add("?address", MySqlDbType.VarChar).Value = "myaddress";
cmd.ExecuteNonQuery();
ログイン後にコピー

このコードは、SQL インジェクションから保護しながら INSERT ステートメントを正常に実行します。

以上がC# を使用して MySQL にデータを挿入すると、「person カラムを Null にすることはできません」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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