SQL搜索查询到Access DB?

时间:2011-09-15 00:19:39

标签: sql vb.net visual-studio-2010

我正在尝试使用文本框中的搜索按钮查询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”但我无法弄清楚如何用“喜欢”的功能来做。

2 个答案:

答案 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会在数据集中返回不同的记录,并且如果名称重复,则指导者是主要表。