[英]Attempting to INSERT values into a MySQL DB from C# code within a form, but getting "Column cannot be NULL
所有 - 提前感謝您的時間。 因此,背景信息 - 我正在嘗試使用 C# 創建聯系人注冊表格,以將信息傳遞到我的 MySql 數據庫中。 如果我直接在代碼中使用查詢,它就可以工作。 但是,我讀到您應該使用存儲過程來保證安全。 所以,工作代碼是:
using (MySqlCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = @"INSERT INTO Contacts (contactID,last_name,first_name,address,city,state,zip_code,email_address,newsletter,is_Cell) VALUES (@ciD,@ln, @fn, @add, @city, @state, @zip, @email, @news, @cell)";
//cmd.CommandText = "insert_contact";
//cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("@cID", MySqlDbType.VarChar);
cmd.Parameters.Add("@ln", MySqlDbType.VarChar);
cmd.Parameters.Add("@fn", MySqlDbType.VarChar);
cmd.Parameters.Add("@add", MySqlDbType.VarChar);
cmd.Parameters.Add("@city", MySqlDbType.VarChar);
cmd.Parameters.Add("@state", MySqlDbType.VarChar);
cmd.Parameters.Add("@zip", MySqlDbType.VarChar);
cmd.Parameters.Add("@email", MySqlDbType.VarChar);
cmd.Parameters.Add("@news", MySqlDbType.Bit);
cmd.Parameters.Add("@cell", MySqlDbType.Bit);
cmd.Parameters["@cID"].Value = default;
cmd.Parameters["@ln"].Value = lastName_TextBox.Text;
cmd.Parameters["@fn"].Value = firstName_TextBox.Text;
cmd.Parameters["@add"].Value = address_TextBox.Text;
cmd.Parameters["@city"].Value = city_TextBox.Text;
cmd.Parameters["@state"].Value = state_DropDown.Text;
cmd.Parameters["@zip"].Value = zipCode_TextBox.Text;
cmd.Parameters["@email"].Value = email_TextBox.Text;
cmd.Parameters["@news"].Value = newsletter_CheckBox.Checked;
cmd.Parameters["@cell"].Value = cell_CheckBox.Checked;
cmd.ExecuteNonQuery();
conn.Close();
但是,當我將以下行更改為此時,我得到“不能是 NULL 錯誤”:
conn.Open();
//cmd.CommandText = @"INSERT INTO Contacts (contactID,last_name,first_name,address,city,state,zip_code,email_address,newsletter,is_Cell) VALUES (@ciD,@ln, @fn, @add, @city, @state, @zip, @email, @news, @cell)";
cmd.CommandText = "insert_contact";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
我在數據庫上的存儲過程是(我懷疑這可能是錯誤所在):
BEGIN
INSERT INTO Contacts (contactID,last_name,first_name,address,city,state,zip_code,email_address,newsletter,is_Cell)
VALUES (@ciD,@ln, @fn, @add, @city, @state, @zip, @email, @news, @cell);
END
我嘗試了以下操作,並伴有錯誤:
• 將存儲過程中的“@”更改為“?” -(在 SQL 語法中出錯)
• 更改所有列以接受 NULL 值。 -(所有列都有一個 NULL 值)。
如果這很簡單,我深表歉意 - 剛剛開始學習。
提前致謝!
您的insert_contact
存儲過程必須提供如下參數(帶有類型):
CREATE PROCEDURE insert_contact
(
IN cID VARCHAR,
IN ln VARCHAR(30),
IN fn VARCHAR(45),
IN `add` VARCHAR(30),
IN city VARCHAR(30),
IN state VARCHAR(10),
IN zip VARCHAR(20),
IN email VARCHAR(45),
IN news bit,
IN cell bit,
)
BEGIN
INSERT INTO Contacts
(contactID,last_name,first_name,address,city,state,zip_code,email_address,newsletter,is_Cell)
VALUES
(@cID, @ln, @fn, @add, @city, @state, @zip, @email, @news, @cell);
END
並且如果有任何參數與MySQL保留字沖突,則需要將保留字用單引號轉義。
筆記:
您的contactID
列是int(11)
類型,但您提供的cID
參數為VARCHAR
類型。 您需要注意列類型不匹配並可能導致異常。
參考
好的,終於找到存儲過程喜歡的東西了:
BEGIN
INSERT INTO Contacts
(last_name,first_name,address,city,state,zip_code,email_address,newsletter,is_Cell)
VALUES
(ln, fn, address, city, state, zip, email, news, cell);
END
顯然,它不喜歡傳遞值前面的“@”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.