2013-03-10 35 views
0

我收到多個參數 - 語法錯誤在字符串中查詢表達式:VS 2010 MS-Access 2003中

OleDBException查詢是的「語法錯誤(缺少操作員)未處理的錯誤
表達「(StudentID = 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 我已經把它改爲

我現在收到的錯誤...

查詢表達式

語法錯誤(逗號)

我正在研究它

更新2

string queryString = "SELECT * FROM Students WHERE StudentID = " + StudIDTb.Text + "' OR StudentName = '" + StudNameTb.Text + "' OR StudentCNCI = '" + StudCNCITb.Text + "'"; 

接收相同的錯誤。

尋找到它

更新3 如果不能解決我做的事情應該是這樣,使用參數化查詢,強烈建議,如果這意味着要解決的問題,可能容易被發現代碼的任何問題

+0

什麼是「+標題」應該在您的查詢字符串的結尾? – 2013-03-10 15:01:54

+0

錯誤字符串告訴你問題是什麼,「'78894452)Bob'」。在Text屬性上調用ToString根本沒有意義。 – PhoenixReborn 2013-03-10 15:03:42

+0

我刪除了+標題,但在沒有Bob的情況下得到相同的錯誤。 – bucketblast 2013-03-10 15:05:21

回答

1

它告訴你,你的查詢是無效的。你有這個

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' 

此外,從其他評論,你實際上有多個報價不匹配(一開始和另一個結尾)。

+0

Mike C - 非常感謝,但我得到的錯誤沒有Bob – bucketblast 2013-03-10 15:07:45

+0

嘗試刪除括號 – 2013-03-10 15:08:52

相關問題