您好,我有一個名為 Card_tbl 的表,其中包含一個單元 CardID。問題是,當我只插入像12345這樣的數字時,它們會上傳到資料庫中,但是當我使用像Q1234R這樣的混合字母時,它會說INVALID COLUMN NAME Q1234R我嘗試了很多方法來修復它但沒有成功。
細胞在 VARCHAR(50)這是我的代碼
Con.Open();
SqlCommand cmd = new SqlCommand("insert into Card_tbl values(" txtCardNumber.Text ")", Con);
cmd.ExecuteNonQuery();
MessageBox.Show("Admin Successfully Added!");
Con.Close();
populate();
//updateroomstate();
Clean();
錯誤顯示在這里 cmd.ExecuteNonQuery();
先感謝您。
uj5u.com熱心網友回復:
解決方案
正確的解決方案是使用準備好的陳述句。您已經說過該列是varchar(50)這樣的:
using (SqlConnection conn = new SqlConnection("yourconnectionstring"))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("INSERT INTO Card_tbl VALUES (@cardNumber)", conn))
{
// we specify type VarChar and size 50, because your column is a varchar(50)
cmd.Parameters.Add("@cardNumber", SqlDbType.VarChar, 50).Value = txtCardNumber.Text;
cmd.ExecuteNonQuery();
}
}
我還建議您為插入指定列名:
INSERT INTO Card_tbl (CardId) VALUES (@cardNumber) -- I've assumed that the column is called CardId
為什么我們需要引數化查詢/準備好的陳述句?
我們需要準備好的陳述句是因為用戶可能會在查詢中輸入惡意內容,從而迫使您的服務器執行您不??希望的查詢。
如果您有這樣的查詢,SQL Server 將執行插入然后洗掉表:
INSERT INTO MyTable VALUES ('hello'); DROP TABLE MyTable; -- comment
這是一個多陳述句查詢,意味著先執行 INSERT,然后執行 DROP TABLE。該--代表評論,在查詢中被丟棄后的一切。
現在,如果您構建一個類似 的查詢"INSERT INTO MyTable VALUES ('" someUserInput "')",惡意用戶如何使這個查詢更像前一個查詢?簡單:在他們的輸入中輸入 SQL。
假設someUserInput是'); DROP TABLE MyTable; -- comment那么您的查詢將變為:
INSERT INTO MyTable VALUES(''); DROP TABLE MyTable; -- comment')
像這樣,惡意用戶可以對您的資料庫執行極具破壞性的操作,繞過登錄頁面,暴露機密資訊等。這對您的應用程式來說是一個巨大的風險。
準備好的陳述句通過將查詢文本與引數值分開來作業。因為它們不是查詢的一部分,所以它們不能被解釋為 SQL。這也意味著二進制資料型別可以作為二進制而不是文本發送到服務器。例子:DateTime。
uj5u.com熱心網友回復:
試試這個
插入 Card_tbl(CardID) values('" txtCardNumber.Text "')"
https://www.w3schools.com/sql/sql_insert.asp
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336033.html
