vb.net, как я запрашиваю доступ к базе данных и отображаю ее в виде списка? - PullRequest
0 голосов
/ 05 ноября 2018

Я создаю форму, где я могу сделать следующее: см. Изображение Как видите, у меня есть 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 , чтобы увидеть его в целом, и просмотр списка для запросов

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

У меня может быть 2 текстовых поля назад.

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. BeginUpdate элемента управления ListView не позволяет экрану перекрасить каждый раз, когда вы добавляете элемент. Это ускоряет сложение предметов.
  2. Блок Using ... End Using гарантирует, что ваше соединение закрыто и удалено. событие, если есть ошибка.
  3. Я добавил знаки вопроса в предложении Where вашего оператора SQL. Это заполнители для параметров в поставщике Access / OleDb.
  4. Я добавил 2 параметра в коллекцию параметров команды объект. Метод Add имеет ряд перегрузок. Тот, который используется здесь принимает имя и тип данных. Тогда свойство Value параметра устанавливается на цифры в текстовых полях. Эти значения в тексте свойство, поэтому они являются строками и нуждаются в CInt () для преобразования в Целые.
  5. Я переместил метод Open непосредственно перед выполнением команды.
  6. Снова блок Using ... End Using, как описано выше.
  7. OOPS! Я забыл добавить петлю (красное лицо) - код исправлен
  8. Внутри цикла создайте новый ListViewItem. Новый предмет для каждого итерация цикла.
  9. Установите свойство Text элемента ListViewItem для первого столбца в считывателе. Преобразуйте его в строку. Это должно отображаться в первом столбце.
  10. Установите первый подэлемент ListViewItem во второй столбец читатель. Снова преобразовать в строку. Это должно отображаться в второй столбец.
  11. Добавьте ListViewItem в ListView.
  12. Первое Конечное использование закроет и утилизирует ваш data_reader. Second End Using закроет и удалит ваше соединение.
  13. Очень важно! ListView1.EndUpdate () Ничего не отображается в ListView без этой строки.

Надеюсь, это поможет.

0 голосов
/ 05 ноября 2018

Не знаю, получу ли я ваш вопрос, но если вы хотите отобразить Имя и Аккаунт из вашей базы данных, я предлагаю вам использовать 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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...