vb.net,当我查询Access数据库并在listview中显示它时?

时间:2018-11-05 18:55:54

标签: database vb.net listview

我正在创建一个表单,可以执行以下操作: please see the image  如您所见,我有一个 txt_id_up txt_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= data\base.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 中只能显示以下几列吗? 名称 帐户

我澄清,我通常使用 datagridview 进行查看,并使用 listview进行查询

2 个答案:

答案 0 :(得分:0)

我不知道是否收到您的问题,但是如果您想从数据库中显示姓名帐户,建议您使用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= data\base.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  

答案 1 :(得分:0)

我可能会将两个文本框向后退。

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= data\base.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. Useing ... End Using块可确保关闭并释放您的连接  错误发生。
  3. 我在SQL语句的Where子句中添加了问号。 这些是Access / OleDb提供程序中参数的占位符。
  4. 我将2个参数添加到Command的Parameters集合中 宾语。 Add方法具有许多重载。这里用的那个 具有名称和数据类型。然后参数的Value属性 设置为文本框中的数字。这些值在文本中 属性,因此它们是字符串,需要CInt()转换为 整数。
  5. 在执行命令之前,我将Open方法直接移动到了。
  6. 再次按照上面的说明使用Using ... End Using块。
  7. 糟糕!我忘了添加循环(红脸)-代码现已更正
  8. 在循环中,创建一个新的ListViewItem。每个都有一个新项目 循环的迭代。
  9. 将ListViewItem的Text属性设置为阅读器的第一列。将其转换为字符串。这应该显示在第一列中。
  10. 将ListViewItem的第一个SubItem设置为  读者。再次转换为字符串。这应该显示在  第二列。
  11. 将ListViewItem添加到ListView。
  12. 第一个最终用途将关闭并处置您的data_reader。的  第二个“最终使用”将关闭并处理您的连接。
  13. 非常重要! ListView1.EndUpdate()什么都没有显示在  没有此行的ListView。

希望这会有所帮助。