2012-04-15 58 views
0
statement = "SELECT OrderID, (SELECT VendName FROM Vendors WHERE Vendors.VendorID = Orders.VendorID) " & 
         ",OrderDt, RcvdDt, OrderTotal " & 
         "FROM Orders " & 
         "WHERE VendName=? " & 
         "ORDER BY OrderDt DESC" 

Dim cmd As New OleDbCommand(statement, connection) 
cmd.Parameters.AddWithValue("VendName", txtVendorFilter.Text) 
Dim reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.Default) 

我試圖通過簡單地將文本框值連接到SQL,然後我得到一個「沒有給出所需參數的值」,並閱讀,我應該使用而不是參數化查詢。所以我嘗試了這個,它不會給我任何錯誤,但讀者從來沒有任何錯誤。我從來沒有使用過參數化查詢,所以我有點失落,爲什麼這不起作用。參數化的查詢不工作在VB

編輯: 我已經改變了上面的代碼來說明OLEDB的內容,我簡要地介紹了它應該如何工作,並且它給了我「再次爲所需參數給出的值」。

回答

3

的一個問題是在這裏:

"WHERE VendName='@x' " & 

刪除該'馬克 - 參數設置會照顧這對你:是指'@x'作爲處理

"WHERE VendName= @x " & 

查詢使用'一個字符串類型,而不是參數名稱。

此外,由於您使用的是OleDb,因此不支持名稱參數。您需要使用?來表示查詢中的參數:

"WHERE VendName= ? " & 
+0

謝謝。我這樣做了,現在它又一次給了我一個執行讀者的錯誤,說沒有給出一個或多個所需參數的值... – Tomcat 2012-04-15 20:31:58

+0

@ user1335008 - 我錯過了你正在使用OleDb。答案已更新。 – Oded 2012-04-15 20:34:31