语句中的查询表达式中的语法错误(缺少运算符)

Posted

技术标签:

【中文标题】语句中的查询表达式中的语法错误(缺少运算符)【英文标题】:Syntax error (missing operator) in query expression in statement 【发布时间】:2015-08-03 18:46:51 【问题描述】:
     sqlStatement = "select Price from OrderItem where orderId=" + orderId;
            myAccessCommand = new OleDbCommand(sqlStatement, myAccessConn);
            myDataAdapter = new OleDbDataAdapter(myAccessCommand);
            myDataAdapter.Fill(myDataSet, "OrderItem");`DataTableCollection dta = myDataSet.Tables;
            DataColumnCollection drc = myDataSet.Tables["Orders"].Columns;
            DataRowCollection dra = myDataSet.Tables["Orders"].Rows;

            foreach (DataRow dr in dra)
            
                orderId= dr[0].ToString();
                Checkintime= dr[1].ToString();
                RoomPrice= dr[2].ToString();
                ReceiptNo= dr[3].ToString();
                Console.WriteLine("orderId: " + orderId + ", Checkintime:  " + Checkintime + ", RoomPrice: " + RoomPrice + ", ReceiptNo: " + ReceiptNo + "");

            `

我有一个语法错误,上面写着“查询表达式 'orderId=' 中的语法错误(缺少运算符)。”

我似乎找不到错误。

【问题讨论】:

orderId 列的类型是什么? 在查询中使用parameters 不要尝试通过 orderId.ToString() 来修复它。你确实需要一个参数化查询。 【参考方案1】:

问题的根本原因是您没有使用参数化查询,而是试图动态创建一个 sql 字符串。结果,您在该字符串的汇编代码中出错。但是,如果您使用参数化查询,那么遇到此类问题的机会就会低很多,因为您不必搞乱引号、数字到字符串的转换等。最重要的是,如果你使用参数,你不会有sql注入攻击,它也使代码更具可读性。

阅读http://www.dotnetperls.com/sqlparameter,了解如何以应有的方式使用参数化查询,而不仅仅是修复查询字符串中的文本错误。这不是应该的方式。

这也是一个很好的解释:http://www.dreamincode.net/forums/topic/268104-parameterizing-your-sql-queries-the-right-way-to-query-a-database/

【讨论】:

以上是关于语句中的查询表达式中的语法错误(缺少运算符)的主要内容,如果未能解决你的问题,请参考以下文章

查询表达式中的语法错误(缺少运算符)

访问表单 - 查询表达式中的语法错误(缺少运算符)

查询表达式中的语法错误(缺少运算符)“

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

查询表达式中的语法错误(缺少运算符) - ASP.NET

Access 2010:查询表达式中的语法错误(缺少运算符)