0

我正在接收


OleDBException 是“查询表达式 '(StudentID = 100' OR StudentName = 'Nick' OR 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 如果无法解决,我会按照应有的方式进行操作,如果这意味着解决问题并且可能很容易发现代码的任何问题,则强烈建议使用参数化查询

4

1 回答 1

1

它告诉您您的查询无效。你有这个

SELECT * 
FROM Students
WHERE (StudentID='a' OR StudentName='b' or StudentCNCI='c')Bob

最终不喜欢 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'

此外,从其他评论中,您实际上有多个引用不匹配(一个在开头,另一个在结尾)。

于 2013-03-10T15:02:26.053 回答