Как использовать средство чтения данных в vb.net

Помогите, как я действительно использую средство чтения данных в vb.net. Я использую odbc для соединения mysql и vb.net.
Функция я объявил на модуле:

Public Function form2search(ByVal drugname As String) As OdbcDataReader

        cmd.CommandText = "SELECT *  FROM drug WHERE Drug_name LIKE'%" & drugname & "' "
        Return cmd.ExecuteReader

    End Function

событие text_changed:

con.drugname=textBoxdrugname.text
     Dim rdr As Odbc.OdbcDataReader
            rdr = con.form2search(drugname)
        if rdr.hasrows=true then
        rdr.read()

        TextBoxdrugname.Text = rdr("Drug_name").ToString
                        TextBoxdrugcode.Text = rdr("Drug_code").ToString
                        drugtype.Text = rdr("Drug_type").ToString

        end if

Я вижу результат, но он только загружает первый объект на базе данных. Я поместил этот код в text_changed событие. Каков надлежащий способ сделать это? И что случилось с 2-м кодом, почему это только загружает первые данные

Поскольку Вы видите, что довод "против" является модулем, где я объявил функцию. Затем я создал объект его в форме.

1
задан user225269 24 July 2010 в 08:45
поделиться

2 ответа

DataReader - это реализация низкого уровня, которая не поддерживает навигацию и читает только одну строку каждый раз, когда вы вызываете

reader.Read()

. Для приложения Windows Forms вам, вероятно, следует использовать подход DataSet / DataTable или ORM. И вам следует подумать об использовании сети соединителя mysql поверх драйвера odbc. Он доступен на mysql.com.

Вот небольшой демонстрационный код:

dim table as new DataTable("table1")

' Create a Connection
using conn as new MysqlConnection("...connectionstring")
    conn.Open() ' Open it

    ' Create a new Command Object
    using cmd as new MysqlCommand("SELECT * FROM table", conn)

        ' Create a DataAdapter
        ' A DataAdapter can fill a DataSet or DataTable
        ' and if you use it with a CommandBuilder it also
        ' can persist the changes back to the DB with da.Update(...)
        using da as new MysqlDataAdapter(cmd)
            da.Fill(table) ' Fill the table
        end using

    end using
end using

' A Binding Source allows record navigation
dim bs as new BindingSource(table, nothing)

' You can bind virtually every property (most common are "text" "checked" or "visible"
' of a windows.forms control to a DataSource
' like a DataTable or even plain objects
textBox1.DataBindings.Add("Text", bs, "columnName")

' Now you can navigate your data
bs.MoveNext()

' Even a ComboBox can be bound to a List and display the related value
' of your current row
comboBox1.DataSource = table2
comboBox1.DisplayMember = "name"
comboBox1.ValueMember = "id"

comboBox1.DataBindings.Add("SelectedValue", bs, "id")
2
ответ дан 2 September 2019 в 22:47
поделиться

Вам нужно просто поместить объект чтения данных в цикл while. Вот пример кода:

      dr = myCommand.ExecuteReader()
      While dr.Read()
      'reading from the datareader
       MessageBox.Show("colname1" & dr(0).ToString())
       MessageBox.Show("colname2" & dr(1).ToString())
       MessageBox.Show("colname3" & dr(2).ToString())
       MessageBox.Show("colname4" & dr(3).ToString())
       MessageBox.Show("colname5" & dr(4).ToString())
      'displaying the data from the table
       End While
       dr.Close()
0
ответ дан 2 September 2019 в 22:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: