在c#查询表达式中出现语法错误(缺少运算符)

本文关键字:错误 运算符 语法 查询 查询表 表达式 | 更新日期: 2023-09-27 18:13:13

我正在编写代码,并得到一个语法错误,我不知道从哪里来。这是我使用的代码:

string u = "select uniqcode from login where users='" + textBoxX1.Text + "' ";

,这是我得到的错误:

"查询表达式语法错误(缺少运算符)" select uniqcodeFrom login where users='someuser' "。"(System.Data.OleDb.OleDbException) System.Data.OleDb.OleDbException在查询表达式中出现语法错误(缺少运算符)" select uniqcode from login where users='someuser' "。"

在c#查询表达式中出现语法错误(缺少运算符)

文本框文本可能包含单引号(')。如果是,则将单引号(')替换为两个单引号(")

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语句中。