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