Как использовать ридер в vb.net - PullRequest
1 голос
/ 24 июля 2010

Пожалуйста, помогите, как мне действительно использовать устройство чтения данных в 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

текстовое событие:

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-м кодом, почему он загружает только первые данные

Как видите, con - это модуль, в котором я объявил функцию. Затем я создал объект в виде.

Ответы [ 2 ]

2 голосов
/ 24 июля 2010

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

reader.Read()

. Для приложения Windows Forms вам, вероятно, следует использовать подход DataSet / DataTable илиОРМ.И вы должны рассмотреть возможность использования 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")
0 голосов
/ 24 июля 2010

Вы должны просто поместить объект чтения данных в цикл 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...