[英]Getting a syntax error (missing operator) in query expression in C#
我正在編寫代碼並收到語法錯誤,但該錯誤來自何處。 這是我正在使用的代碼:
string u = "select uniqcode from login where users='" + textBoxX1.Text + "' ";
這是我得到的錯誤:
“查詢表達式“從登錄名中選擇uniqcode,其中users ='someuser'”時出現語法錯誤(缺少運算符)。” (System.Data.OleDb.OleDbException)引發了System.Data.OleDb.OleDbException:“查詢表達式“從登錄名中選擇uniqcode,其中users ='someuser'”的語法錯誤(缺少運算符)。”
文本框文本可能包含單引號(')。 如果是,則用兩個單引號('')替換單引號(')。
否則,嘗試使用sql參數執行它。
string u = "select login.uniqcode from [login] where users='" + textBoxX1.Text.Trim() + "'";
您需要首先閱讀並了解 OleDB中存在SQL語法限制。
“必須用單引號將單引號轉義。”
但實際上,請忘記單引號。
在此處閱讀有關使用OleDB的更多信息。 無論如何,它都是古老的技術,所以我將擺脫OleDB的束縛,而將您的數據庫移植到SQL Server或MySQL。
但是,您可能需要的是這樣的東西...
try
{
connw.Open();
OleDbCommand command;
command = new OleDbCommand(
"SELECT *" +
"FROM tableA WHERE Deliveries.EmployeeID = ?, Deliveries.FIN = ?, Deliveries.TodaysOrders = ? , connw);
command.Parameters.Add(new OleDbParameter("@EMPID", Convert.ToDecimal(empsplitIt[1])));
command.Parameters.Add(new OleDbParameter("@FIN", truckSplit[1].ToString()));
command.Parameters.Add(new OleDbParameter("@TodaysOrder", "R"));
catchReturnedRows = command.ExecuteNonQuery();//Commit
connw.Close();
}
catch (OleDbException exception)
{
MessageBox.Show(exception.Message, "OleDb Exception");
}
數據庫編碼的黃金法則是,永遠不要像上面那樣直接將變量傳遞到SQL語句中。 這為SQL注入大開了大門。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.