[英]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语法限制。
“必须用单引号将单引号转义。”
但实际上,请忘记单引号。
在此处阅读有关使用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.