在C#中的查询表达式中获取语法错误(缺少运算符)

时间:2015-09-18 10:20:34

标签: c# sql

我正在编写代码并收到语法错误,我不知道它来自何处。这是我正在使用的代码:

 <h1>{{vm.title}}</h1>

这是我得到的错误:

  

&#34;查询表达式中的语法错误(缺少运算符)&#39;&#39;选择uniqcode   从登录用户=&#39; someuser&#39; &#39;&#39;&#34;   (System.Data.OleDb.OleDbException)System.Data.OleDb.OleDbException   被抛出:&#34;查询表达式中的语法错误(缺少运算符)   &#39;&#39;从登录中选择uniqcode,其中users =&#39; someuser&#39; &#39;&#39;&#34;

4 个答案:

答案 0 :(得分:1)

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

否则,尝试使用sql参数执行它。

答案 1 :(得分:0)

string u = "select login.uniqcode from [login] where users='" + textBoxX1.Text.Trim() + "'";

答案 2 :(得分:0)

由于您的错误表示您正在使用OleDb连接,因此您可以使用以下代码。这也将避免SQL Injection。但是,您可能需要稍微处理一下代码。

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

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

您可能会看到示例herehere

答案 3 :(得分:0)

首先需要read and understand OleDB中存在SQL语法限制。

“必须使用另一个单引号转义单引号。”

但实际上,忘记单引号。

了解有关使用OleDB here的更多信息。无论如何,这是古老的技术,所以我会远离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 Injection打开了大部分时间。