Vb.NET: Recuperare dati da un database Access e inserirli in una ListView

Allora, visto che la cosa mi aveva dato qualche problema e in giro per la rete avevo trovato poco materiale, senza esempi specifici e molte richieste di aiuto per una cosa simile, faccio un esempio pratico in questo post. Il problema, come dice bene il titolo, è prendere dei dati da un db Access e mostrarli tramite un controllo ListView di VB.NET. In questo esempio abbiamo un form con un pulsante chiamato Button1 e una ListView chiamata ListView1; quando viene premuto il pulsante Button1 la nostra ListView si deve popolare con i dati del database. I record del database di esempio rappresentano le informazioni riguardanti cd musicali e sono composti dai campi artista, titolo, genere, anno. La tabella del database si chiama album.
Connessione al database Access. Per prima cosa è necessario fare un paio di imports di namespaces, precisamente:

 Imports System.Data
 Imports System.Data.OleDb

A questo punto dobbiamo impostare la stringa di connessione che è formata da una prima parte diciamo standard, seguita dal path in cui si trova il nostro database in questione

 'Percorso del DataBase (db2.mdb)'
 Dim PercorsoDB As String = "C:\db2.mdb"
 'Stringa di Connessione'
 Dim ConnString As String = _
 "Provider= Microsoft.Jet.OLEDB.4.0; " & "Data Source ="_
   & PercorsoDB

ora dobbiamo dichiarare ancora un po’ di cose: la connessione, il contenitore per il record che andiamo di volta in volta a leggere, il comando che andremo ad eseguire e la stringa sql che costituisce il testo del comando (la SELECT vera e propria)

 Dim Cn As New OleDbConnection(ConnString)
 Dim dr As OleDbDataReader
 Dim cmd As OleDbCommand
 Dim sql As String

per ora ci siamo, non siamo ancora connessi al database però, ma abbiamo solo predisposto il tutto. Abbiamo detto che la ListView si deve popolare quando viene premuto Button1 per cui, quando esso verrà premuto, il suo handler chiamerà una funzione chiamata VisualizzaDati() che si occuperà del loro recupero e della loro visualizzazione

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles Button1.Click
     VisualizzaDati()
 End Sub

ora entriamo nella funzione visualizzaDati() e ci connettiamo effettivamente al database

 Function VisualizzaDati()
     Cn.Open()

e qui inizia la seconda fase: il recupero e visualizzazione nella ListView.

Creiamo la stringa sql che costituisce l’interrogazione, creaiamo il comando passandogli la stringa appena creata e la connessione in uso, e poi eseguiamo il comando indicando a quale DataReader restituire il risultato

   sql = "SELECT artista,titolo,genere,anno FROM album"
   cmd = New OleDbCommand(sql, Cn)
   dr = cmd.ExecuteReader

ora il codice seguente inserisce tutti i dati recuperati nella ListView, dopo aver creato le intestazioni delle colonne. Per i campi che non sono obbligatori nel database Access è necessario effettuare dei controlli per evitare che restituiscano valori DBNull e generino quindi errori. Il codice è ampiamente commentato.

 Dim lvi As New ListViewItem
 ListView1.View = View.Details  'FONDAMENTALE'

 'si impostano alcune proprietà'  
 ListView1.LabelEdit = True
 ListView1.AllowColumnReorder = True
 ListView1.FullRowSelect = True
 ListView1.GridLines = True  'mostra una sottile griglia'
 ListView1.Sorting = SortOrder.Ascending  'ordinamento'

 'creo le colonne impostando per ognuna il titolo,'
 'dimensione e allineamento'
 ListView1.Columns.Add("Artista",100,HorizontalAlignment.Left)
 ListView1.Columns.Add("Titolo",150,HorizontalAlignment.Left)
 ListView1.Columns.Add("Genere",70,HorizontalAlignment.Left)
 ListView1.Columns.Add("Anno",40,HorizontalAlignment.Left)

 Do While dr.Read()
  'I primi 2 campi li posso inserire senza'
  'problemi perché obbligatori nel database'
  lvi = ListView1.Items.Add(dr("artista"))
  lvi.SubItems.Add(dr("titolo"))

  'per quelli facoltativi devo invece'
  'fare un controllo IsDBNull'
  If IsDBNull(dr("genere")) Then
     lvi.SubItems.Add("")
  Else
     lvi.SubItems.Add((dr("genere")))
  End If
  If IsDBNull(dr("anno")) Then
     lvi.SubItems.Add("")
  Else
     lvi.SubItems.Add((dr("anno")))
  End If
 Loop
 Cn.Close()
End Function   ' fine funzione VisualizzaDati()'

13 thoughts on “Vb.NET: Recuperare dati da un database Access e inserirli in una ListView

  1. Pingback: Dede Blog » VB.NET: Esportare un database Access su un foglio Excel

  2. Grazie, fa piacere che l’hai trovato utile.
    Si, hai ragione. Non so come ho fatto a perdermelo nel copia/incolla. Hai fatto bene a segnalarmelo, correggo subito.

  3. Ciao Dede, prima di tutto complimenti per il blog. Ben fatto. Avrei una domandina. Io ho implementato in una funzione di una classe la select di estrazione dati. Non potendo specificare direttamente nella classe la listview come posso pescare i dati richiamandoli poi nella form principale?

    Esempio:

    Cn.Open()
    Dim sql As String = “select …….”
    Dim cmd As New OleDbCommand(sql, Cn)
    Dim dr As OleDbDataReader = cmd.ExecuteReader
    Do While dr.Read()
    a(i) = dr(0)
    Loop
    …….

    In questo caso, come faccio dalla form principale a fargli sistemare i record estratti dalla select scritta nella classe?

    Grazie!

  4. grazie per l’esempio sulla listview funziona alla grande.
    sono un novello in vb e in generale, con le tue istruzioni tutto ok

  5. Ciao ragazzi sto cercando un programmatore in visual basic che mi possa progettare un programma per la gestione del fantacalcio al quale io partecipo, sono disposto anche a pagare, l’importante e che non sia una cifra esorbitante. Chiunque fosse intenzionato ad aiutarmi può contattarmi al seguente indirizzo di posta:
    marconi82@hotmail.it

  6. Ciao Dede i miei complimenti per il blog è fatto molto bene e per i consigli che dai.
    Aprofitto della tua cortesia per chiederti una cosa:
    Il mio problema è che ho bisogno di esportare la listview completa in un file, il massimo sarebbe excel o anche txt va bene, per poi mandarla via mail.
    Ho fatto delle ricerche in rete, ma non sono stato capace di trovare nulla di utile.
    Ti ringrazio
    Dylan

  7. Ciao,
    di sicuro avevo già fatto da qualche parte l’esportazione dei dati contenuti in una ListView su un file txt, forse anche su Excel ma li sono meno sicuro(è da un po’ che non mi occupo più di Vb.Net, sorry). Appena ho tempo (temo che non sarà prima di venerdi prossimo) guardo, e se lo trovo vedo di postare un esempio completo e funzionante del come fare.
    Se per caso hai già risolto, o risolvi in questi giorni al massimo avvisa.
    Saluti.

  8. Grazie mille!

    Questo è il primo tutorial con l’argomento spiegato come si deve.
    L’ho adattato leggermente alle mie esigenze è funziona alla grande.
    Grazie ancora!!!

    • Ciao Antonio,
      grazie mille per il feedback sul tutorial.
      Sono contento che tu l’abbiamo trovato utile e chiaro.
      E’ un articolo del 2007 quindi è possibile che quanto illustrato possa essere un po’ da aggiustare con le nuove versioni…

      Ciao,
      Davis

Leave a Reply

Your email address will not be published. Required fields are marked *