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的值中(因为当我将另一个参数设置为参数时,它仍然有效)。有趣的是,上面只有几行代码,我有一个不同的查询,使用与For Each循环从中获取match变量的相同选择列表,为相同ID设置了参数化值。
Choices是一个long列表,当我使用choices(0)在查询中参数化ID时,它可以工作。但是现在在这个循环中,我有很长的新比赛了,它不想让它对我有用。有什么想法吗?
尽管OLEDB类可以使用命名参数,但实际上只是使用’?’。标记在背景中,因此参数按INDEX顺序排列。您的sql的ID变量位于Subsp变量之前。
像这样切换它:
For Each match As Long In choices command_sbsp.Parameters.Clear() command_sbsp.Parameters.AddWithValue("@ID", match) command_sbsp.Parameters.AddWithValue("@Subsp", word)