multiple Parameters -查询表达式中字符串语法错误:VS 2010 with MS-Access 20
本文关键字:VS 错误 2010 with MS-Access 语法 字符串 Parameters 查询 查询表 表达式 | 更新日期: 2023-09-27 18:03:16
我正在接收
oledbeexception是未处理的"语法错误(缺少操作符)在查询
表达式'(studententid = 100'或StudentName = 'Nick'或StudentCNCI = '78894452 ')Bob'。"
private void btnFind_Click(object sender, EventArgs e)
{
string title = textBox1.Text.ToString();
string queryString = "SELECT * FROM Students WHERE (StudentID = " + StudIDTb.Text.ToString() + "' OR StudentName = '" + StudNameTb.Text.ToString() + "' OR StudentCNCI = '" + StudCNCITb.Text.ToString() + ")" + title;
OleDbCommand command = new OleDbCommand();
command.CommandText = queryString;
command.Connection = myCon;
myCon.Open();
OleDbDataReader dr = command.ExecuteReader(); // error pointing here
while (dr.Read())
{
StudIDTb.Text += String.Format("StudentID: {0}'n", dr["StudentID"].ToString());
StudNameTb.Text += String.Format("StudentName: {0}'n", dr["StudentName"].ToString());
StudCNCITb.Text += String.Format("StudentCNIC: {0}'n", dr["StudentCNIC"].ToString());
StudDOBTb.Text += String.Format("StudentDOB: {0}'n", dr["StudentDOB"].ToString());
}
myCon.Close();
}
我也试过…
string queryString = "SELECT * FROM Students WHERE (StudentID = " + StudIDTb.Text + "' OR StudentName = '" + StudNameTb.Text + "' OR StudentCNCI = '" + StudCNCITb.Text + ")" + title;
我不想给你错误的印象,我是"懒惰",但我假设我得到这个错误,因为我有查询它不正确,或者我犯了一个打字错误,或者它可能是别的东西。请问有人能帮我吗,提前谢谢。
ps我知道我不使用参数化查询受到批评。一旦基本正确,我就会改变它。我知道这里有很多类似的问题,但我还是答不上来。
更新1 我把它改成
"SELECT * FROM Students WHERE StudentID = " + StudIDTb.Text + " OR StudentName = '" + StudNameTb.Text + "', OR StudentCNCI = '" + StudCNCITb.Text + ")";
我现在收到的错误是…
查询表达式
语法错误(逗号)
我正在调查
更新2
string queryString = "SELECT * FROM Students WHERE StudentID = " + StudIDTb.Text + "' OR StudentName = '" + StudNameTb.Text + "' OR StudentCNCI = '" + StudCNCITb.Text + "'";
收到相同的错误。
调查
更新3 如果无法解决,我会按照应该的方式来解决,强烈建议使用参数化查询,如果这意味着解决问题,并且可能很容易发现代码
提示查询无效。你有这个
SELECT *
FROM Students
WHERE (StudentID='a' OR StudentName='b' or StudentCNCI='c')Bob
不喜欢那个鲍勃,也不清楚你为什么需要它。解释你的意图是什么,或者干脆把它去掉,因为它对你的查询似乎没有必要。
string queryString = "SELECT * FROM Students WHERE StudentID = '" +
StudIDTb.Text + "' OR StudentName = '" + StudNameTb.Text +
"' OR StudentCNCI = '" + StudCNCITb.Text + "'";
正如你在文章中提到的,你也需要参数化你的查询。如果你需要帮助,请告诉我们,但这很简单,而且这里是一个常见的帖子,所以你已经有足够的资源来解决这个问题。
编辑:如果你愿意,你可以去掉括号。只有在执行子查询或类似操作时才需要它。它们不会影响你的查询,它们只是不是真正必要的。
SELECT *
FROM Students
WHERE StudentID='a' OR StudentName='b' or StudentCNCI='c'
另外,从其他注释来看,您实际上有多个引号不匹配(一个在开头,另一个在末尾)。