Dim command_sbsp As New OleDbCommand("SELECT * FROM SNOMED_ORG_INFO WHERE ConceptID=@ID AND Genus='SALMONELLA' AND SubSpecies=@Subsp", 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)
以上不起作用。查询尝试说没有什么能与之匹配。但是,当我尝试将其作为简单的字符串连接时,它可以正常工作。
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循环从中获取匹配变量的相同选项列表。
Choices是一个long列表,当我使用choice(0)来参数化查询中的ID时,它可以工作。但现在在这个循环中,我有新的比赛,并且它不想让它对我有用。有什么想法吗?
答案 0 :(得分: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)