繁体   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