我正在尝试使用文本框中的搜索按钮查询Access数据库,并将结果插入到列表框中。这是我到目前为止的代码:
Dim con As New OleDbConnection(DBcon)
Try
lbresults.Items.Clear()
Dim dr As OleDbDataReader
Dim command As New OleDbCommand("Select I.InstName, S.StuName FROM Instructor I, Student S WHERE I.InstName Like '%" & txtsearch.Text & "%' and S.StuName like '%" & txtsearch.Text & "%'", con)
con.Open()
command.Connection = con
dr = command.ExecuteReader
While dr.Read()
lbresults.Items.Add(dr("InstName"))
lbresults.Items.Add(dr("StuName"))
End While
Catch ex As Exception
我遇到的问题是它在列表框中多次返回InstName和StuName。我猜是因为我正在做items.add两次?我试图使用“[oledbcommand variable name] .parameters.addwithvalue”但我无法弄清楚如何用“喜欢”的功能来做。
答案 0 :(得分:1)
如果它多次将InstName和StuName添加到下拉列表中,可能是因为查询正在多次返回记录,因为您正在执行select ... where ... like...
尝试将select语句更改为(注意单词DISTINCT):
Dim command As New OleDbCommand("Select DISTINCT I.InstName, S.StuName FROM Instructor I, Student S WHERE I.InstName Like '%" & txtsearch.Text & "%' and S.StuName like '%" & txtsearch.Text & "%'", con)
答案 1 :(得分:0)
您的查询与两个表相关,但未指定关系。
有多种方法可以给猫皮肤但我会这样做是为了保证我能控制结果:
dim SQL as new string = _
"Select 'Instructor' as NameType, I.InstName as NameValue " _
"from Instructor I " _
"where I.InstName Like '%" & txtsearch.Text & "%' " & _
"union " & _
"Select 'Student' as NameType, S.StuName as NameValue " _
"from Student S " _
"where S.StuName Like '%" & txtsearch.Text & "%' "
Dim command As New OleDbCommand(SQL, con)
使用union与union all会在数据集中返回不同的记录,并且如果名称重复,则指导者是主要表。