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 如果无法解决,我会按照应该的方式来解决,强烈建议使用参数化查询,如果这意味着解决问题,并且可能很容易发现代码

multiple Parameters -查询表达式中字符串语法错误:VS 2010 with MS-Access 20

中的任何问题。

提示查询无效。你有这个

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'

另外,从其他注释来看,您实际上有多个引号不匹配(一个在开头,另一个在末尾)。