2013-12-21 44 views
2

我正在嘗試在簡單的訪問數據庫中搜索數據。該代碼是這個沒有給出一個或多個必需參數的值。搜索時出錯

Call connect() 
con.Open() 
cmd = New OleDbCommand("Select * from PO_Record_Table where Customer=asd", con) 
dr = cmd.ExecuteReader 
While dr.Read 
    MsgBox(dr(1)) 
End While 

con.Close() 

如果我按搜索按鈕,出現錯誤:沒有爲一個或多個必需的參數給定值 談到在這條線

dr = cmd.ExecuteReader 

記錄「ASD」是在數據庫客戶字段作爲文本類型。 這個錯誤爲什麼會出現,以及如何完成這個搜索沒有錯誤?

回答

5

我想這錯誤是作爲價值傳遞的文本asd客戶名稱

cmd = New OleDbCommand("Select * from PO_Record_Table where Customer='asd'", con) 

把它用單引號允許數據庫引擎將其識別爲一個字符串值要檢查的Customer列名。如果沒有引號,它會被解釋爲您沒有傳遞給命令的參數的名稱。

編輯在下面的評論中,您嘗試將「文本框」的內容作爲「客戶」列的值,但忘記在文本框文本值的周圍添加引號。

cmd = New OleDbCommand("Select * from PO_Record_Table where Customer='" & textbox.text & "'", con) 

然而,這不應該使用字符串連接方法做,但總是與參數化方法

cmd = New OleDbCommand("Select * from PO_Record_Table where [email protected]", con) 
cmd.Parameters.AddWithValue("@custName", Txt_Find.Text) 
dr = cmd.ExecuteReader 
..... 

這是查詢數據庫傳遞命令文本,唯一的好方法通過用戶輸入獲得的值。此方法允許您的代碼從SQL Injection attacks安全,並在解析文本框的內容時消除問題。事實上,如果沒有參數,並且如果您的文本框包含單引號,則字符串連接方法將失敗並出現語法錯誤。

+0

這樣做。我會選擇你的答案作爲正確的答案。也感謝imran。我會upvoted,但我是新的,沒有privilages尚 –

+0

只要接受答案,你會得到這個特權。 :-) – Steve

+1

如果我這樣做,錯誤再次出現 如何解決任何幫助? cmd =新的OleDbCommand(「Select * from PO_Record_Table where Customer =」&Txt_Find.Text,con) –

2

沒有爲一個或多個必需的參數錯誤的給定值來當不存在你的表名或提起的名字,從數據庫中查詢PO_Record_TableCustomer拼寫

+0

謝謝伊姆蘭。這是一個常見的錯誤,所以我現在總是複製粘貼名稱。這不是一個 –

+0

一個可能性也是由@Steve說,試試這也 –

相關問題