当我查询Access数据库并在列表视图中显示它时,vb.net



我正在创建一个可以执行以下操作的表单:请看图片正如您所看到的,我在数据库中有一个txt_id_uptxt_id_dw,我想进行以下查询。

SELECT * FROM Tabla1
WHERE ID BETWEEN 3 AND 7;

其中txt_id_up=3,且txt_id_dw=7;

Dim connection As OleDbConnection
Dim command As OleDbCommand
Dim data_reader As OleDbDataReader
'------------------------------
'connect to ms.access database
connection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data 
Source= database.accdb;Persist Security Info=False")
connection.Open()
'reading data from Tabla1 table
command = New OleDbCommand("SELECT * FROM Tabla1", connection)
data_reader = command.ExecuteReader
'----------------------------------
'here the code to show in listview1 is missing
'----------------------------------

顺便问一个问题,listview中只能显示以下列吗?名称账户

我澄清说,我使用数据网格视图来查看它,并使用listview来查看查询

我不知道是否收到您的问题,但如果您想从数据库中显示名称帐户,我建议您使用DataGridView

在表单中添加DataGridView控件,并添加以下代码:

Dim connection As OleDbConnection
Dim command As OleDbCommand
Dim data_adapter As OleDbDataAdapter
'------------------------------
'connect to ms.access database
connection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data 
Source= database.accdb;Persist Security Info=False")
connection.Open()
'reading data from Tabla1 table
command = New OleDbCommand("SELECT Name, Account FROM Tabla1 WHERE ID BETWEEN 3 AND 7", connection)
data_adapter = New OleDbDataAdapter(command)
'add results to DataGridView1
Dim datatable as New DataTable("Table")
data_adapter.Fill(datatable)          
DataGridView1.DataSource = datatable  

我可能会把这两个文本框倒过来。

Public Class Form3
Private Sub FillListView()
ListView1.BeginUpdate() 'keeps the control from repainting on each addition
Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data 
Source= database.accdb;Persist Security Info=False")
Dim command As New OleDbCommand("SELECT ID, Name FROM Tabla1 Where ID Between ? And ?;", connection)
command.Parameters.Add("FirstID", OleDbType.Integer).Value = CInt(txt_id_up.Text)
command.Parameters.Add("SecondID", OleDbType.Integer).Value = CInt(txt_id_dw.Text)
connection.Open() 'Open the connection at the last possible minute
Using data_reader = command.ExecuteReader
While data_reader.Read()
Dim li As New ListViewItem()
li.Text = CStr(data_reader.GetValue(0)) 'ID
li.SubItems.Add(CStr(data_reader.GetValue(1))) 'Name
ListView1.Items.Add(li)
Loop
End Using
End Using
ListView1.EndUpdate()
End Sub
End Class

编辑

  1. ListView控件的BeginUpdate阻止屏幕每次添加项目时都要重新绘制。这加快了添加速度项
  2. 正在使用。。。End Using块确保您的连接已关闭并已处理事件(如果存在错误(
  3. 我在SQL语句的Where子句中添加了问号。这些是Access/OleDb提供程序中参数的占位符
  4. 我将2个参数添加到命令的parameters集合对象Add方法有许多重载。这里用的那个采用名称和数据类型。然后是参数的Value属性设置为文本框中的数字。这些值在文本中属性,因此它们是字符串,并且需要CInt((转换为整数
  5. 在命令执行之前,我将Open方法直接移到了
  6. 再次使用。。。结束使用如上所述的块
  7. 哎呀!我忘记添加循环(红脸(-代码现在已更正
  8. 在循环中,创建一个新的ListViewItem。每个都有一个新项目循环的迭代
  9. 将ListViewItem的Text属性设置为读取器中的第一列。将其转换为字符串。这应该显示在第一列中
  10. 将ListViewItem的第一个子项设置为的第二列读者。再次转换为字符串。这应该显示在第二列
  11. 将ListViewItem添加到ListView中
  12. 第一个End Using将关闭并处理您的data_reader。这个第二个End Using将关闭并处理您的连接
  13. 非常重要!ListView1.EndUpdate((没有此行的ListView

希望这能有所帮助。

最新更新