在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' "。"
文本框文本可能包含单引号(')。如果是,则将单引号(')替换为两个单引号(")
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语句中。