2011-07-22 44 views
1
Dim command_sbsp As New OleDbCommand("SELECT * FROM SNOMED_ORG_INFO WHERE [email protected] AND Genus='SALMONELLA' AND [email protected]", SNOMED_DB) 

For Each match As Long In choices 
command_sbsp.Parameters.Clear() 
command_sbsp.Parameters.AddWithValue("@Subsp", word) 
command_sbsp.Parameters.AddWithValue("@ID", match) 

上述不起作用。查詢嘗試表示沒有任何匹配的內容。但是,當我嘗試它作爲一個簡單的字符串連接時,它工作正常。VB.NET - 爲什麼這個sql命令作爲一個字符串工作,但不作爲參數化查詢?

command_sbsp = New OleDbCommand("SELECT * FROM SNOMED_ORG_INFO WHERE ConceptID=" + match.ToString + " AND Genus='SALMONELLA' AND SubSpecies='" + word + "'", SNOMED_DB) 

我自己和一位同事已經注意到了很多,我們不知道爲什麼它不起作用。問題在於@ID的值(因爲當我離開參數化的另一個時,它仍然有效)。有趣的是,在它上面的幾行代碼中,我有一個不同的查詢,它爲同一個ID設置了一個參數化值,使用For Each循環從中獲取匹配變量的相同選擇列表。

選擇是一個多頭列表,當我使用選項(0)在查詢中參數化ID時,它可以工作。但現在在這個循環中,我有了新的比賽,並且不想讓它爲我工作。有什麼想法嗎?

+0

是什麼類型'match'? 'command_sbsp.Parameters.AddWithValue(「@ ID」,match.ToString())'有什麼區別嗎? – asawyer

+0

匹配長...這就是源的狀態 – Martin

回答

5

儘管OLEDB類可以使用命名參數,但它實際上只是使用'?'標記在後臺,所以參數按INDEX順序排列。你的sql在Subsp變量之前有ID變量。

開關它周圍,像這樣:

For Each match As Long In choices 
command_sbsp.Parameters.Clear() 
command_sbsp.Parameters.AddWithValue("@ID", match) 
command_sbsp.Parameters.AddWithValue("@Subsp", word) 
+0

那麼修復它...如果我仍然必須按照它們在查詢中出現的順序輸入內容,變量名稱ID和Subsp有什麼意義?好吧,謝謝你們幫忙清理那些東西。 – cost

相關問題