簡體   English   中英

在C#中的查詢表達式中獲取語法錯誤(缺少運算符)

[英]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 Injection 但是,您可能需要做一些工作才能將代碼片段納入其中。

u = "select uniqcode from login where users=?"; 

u.Parameters.Add("@users", OleDbType.VarChar).value = textBoxX1.Text;

您可能會在這里這里看到示例

您需要首先閱讀並了解 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM