為什麼使用 C# 向 MySQL 插入資料時出現「Person Column Cannot Be Null」錯誤?

Barbara Streisand
發布: 2024-11-09 08:00:03
原創
373 人瀏覽過

Why Am I Getting a

使用 MySQL INSERT 參數的 C#

在 MySQL INSERT 語句中使用參數是維護資料完整性和防止 SQL 注入攻擊的關鍵實踐。但是,您在程式碼中遇到了問題,我們將隨時協助您解決這些問題。

原始問題:

在您的初始程式碼中,您嘗試使用下列參數執行INSERT 語句:

comm.Parameters.Add("@person", "Myname");
comm.Parameters.Add("@address", "Myaddress");
登入後複製

但是,錯誤訊息「Person 欄位不能為空」表示您錯過了為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");
登入後複製

使用問題標記:

另一個選項是使用問號作為參數的佔位符,例如:

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();
登入後複製

此程式碼已成功執行INSERT語句,同時防止SQL 注入。

以上是為什麼使用 C# 向 MySQL 插入資料時出現「Person Column Cannot Be Null」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板