SQL-запрос для поиска в БД? - PullRequest
       0

SQL-запрос для поиска в БД?

0 голосов
/ 15 сентября 2011

Я пытаюсь запросить базу данных 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] .parameters.addwithvalue», но я не мог понять, как это сделать с помощью функции «like».

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Если он добавляет InstName и StuName несколько раз в выпадающий список, возможно, потому что запрос возвращает записи несколько раз, так как вы делаете select ... where ... like...

Попробуйте изменить выражение выбора на (обратите внимание на слово 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)
0 голосов
/ 07 января 2013

Ваш запрос связывает две таблицы без указания отношения.

Есть несколько способов убрать кошку, но я бы сделал это, чтобы гарантировать, что я контролирую результат:

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)

При использовании объединения против объединения все возвращает отдельные записи по набору данных, причем инструктор является преобладающей таблицей в случае дублирования имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...