Visual Basic 2005 passo-passo: Accesso ai dati

ADO.NET è il paradigma, introdotto con la tecnologia .
Visual Basic 2005 passo-passo: Accesso ai dati

ADO.NET è il paradigma, introdotto con la tecnologia .NET di Microsoft, per la gestione delle informazioni contenute all’interno di database. In questo articolo illustreremo in che modo sia possibile visualizzare, modificare e ricercare informazioni in un database utilizzando Visual Basic 2005. ADO.NET ha fatto la sua prima comparsa in Microsoft Visual Studio .NET 2002 ed è oggi utilizzato in tutti i programmi che compongono la suite “Visual Studio 2005” compresi Visual Basic, Visual C++, Visual J# e Visual C# sostituendo i modelli di accesso ai dati ADO (ActiveX Data Objects) e RDO (Remote Data Objects) che avevano caratterizzato Visual Basic 6.

Con l’obiettivo di rendere la guida fruibile da parte di ogni lettore, ci riferiremo alla versione Express Edition di Visual Basic 2005, prelevabile gratuitamente dal sito web di Microsoft, in italiano, ed utilizzabile senza limitazioni.

L’accesso al database e la manipolazione dei dati in esso contenuti saranno possibili mediante una combinazione di codice di programmazione e l’utilizzo dei comuni controlli che siamo soliti incontrare in tutte le finestre di Windows (textbox, etichette di testo, menù, barre degli strumenti e così via).

Attraverso Visual Basic 2005 è quindi possibile creare un’interfaccia, di semplice utilizzo – denominata “front end” – che permetta, con pochi clic del mouse, da parte di un comune utente, di effettuare variazioni o qualunque tipo di interrogazione sul database d’interesse.
Visual Basic 2005 consente di “agganciarsi” a qualunque tipo di sorgente di dati, sia essa memorizzata in locale oppure disponibile su macchine remote.

Gestione fatture.

Inseriamo ora un pulsante facendo doppio clic sulla voce “Button” contenuta nella sezione “Controlli comuni” della Casella degli strumenti.

Trasciniamo il pulsante più o meno al centro del form quindi modifichiamone il nome in btnClienti agendo, come nel caso del form, sulla sua proprietà “(Name)”.
Per modificare la stringa di testo da far apparire sul pulsante, usiamo la proprietà Text: scriviamo Mostra elenco clienti.

Proviamo ad avviare l’applicazione scegliendo il comando Avvia debug dal menù Debug oppure premendo il tasto F5. Com’è possibile verificare, verrà visualizzato un unico form contenente il pulsante “Mostra elenco clienti”: cliccando su tale pulsante non accade alcunché. Questo accade perché all’evento “Click” associato al pulsante btnClienti non è stato ancora collegato nulla.

La finestra “Gestione fatture”, inoltre, appare ridimensionabile a piacimento e non risulta centrata rispetto allo schermo. Iniziamo col sistemare questi ultimi due aspetti.
Chiudiamo l’applicazione cliccando sulla “X” in alto a destra in modo da tornare nella finestra di progettazione di Visual Basic.
A questo punto, clicchiamo sul form ed accediamo alla finestra delle proprietà. Modifichiamo l’impostazione della proprietà FormBorderStyle in FixedSingle e di StartPosition in CenterScreen. Premiamo F5 per controllare il risultato delle modifiche: il form risulterà adesso non più ridimensionabile e perfettamente centrato rispetto allo schermo.

Aggiungiamo ora un nuovo form al progetto: in questa nuova finestra ci proponiamo di visualizzare l’elenco dei clienti recuperati dal database. Clicchiamo quindi su Progetto, Aggiungi Windows Form…
Nella casella “Nome” digitiamo frmClienti.vb quindi clicchiamo sul pulsante Aggiungi.
Nella finestra “Esplora soluzioni” verrà ora indicata la presenza di due form: frmClienti.vb e frmPrincipale.vb:

Visualizzazione dei dati

Facciamo doppio clic sul form “frmClienti.vb” per accedere alla relativa finestra di progettazione.
Modifichiamo la proprietà Text digitando Elenco clienti quindi ridimensioniamo opportunamente il form in modo da renderlo un pò più ampio.

Accedete ora alla finestra Origini dati, espandete il contenuto di “fattureDataSet” cliccando sul simbolo “+” quindi ancora sull’icona “+” posta alla sinistra della tabella “Clienti”: si otterrà la lista dei campi contenuti nella tabella.
Sappiate che è possibile visualizzare un ristretto numero di campi del database (e renderne possibile la modifica) semplicemente trascinandoli sul form, nella finestra di progettazione. Nel nostro caso, invece, clicchiamo sulla tabella “Clienti” quindi sul menù a tendina visualizzato alla sua destra: scegliamo “Dettagli”:

Trasciniamo ora la tabella “Clienti” sul form “Elenco clienti”.

Si noterà immediatamente la creazione automatica di alcuni elementi sul form: tutte le caselle di testo per la visualizzazione e la modifica dei dati memorizzati nella tabella “Clienti” (insieme con le rispettive “etichette” di commento) ed una barra di navigazione che permette di muoversi tra i record presenti nel database.

In calce alla finestra di progettazione, si può osservare come Visual Basic 2005 abbia provveduto a creare diversi oggetti per la gestione degli aspetti legati all’accesso al database:
FattureDataSet è il dataset – creato precedentemente attraverso la procedura guidata – che rappresenta i dati contenuti nel database fatture.mdb
ClientiBindingSource è un componente che funge da intermediario tra la tabella “Clienti” e gli oggetti collegati inseriti sul form (es.: caselle di testo)
ClientiTableAdapter è un componente che si occupa di gestiore il flusso dei dati tra il dataset (FattureDataSet) e le tabelle presenti nel database
ClientiBindingNavigator aggiunge la barra di navigazione nel database relativamente alla tabella “Clienti”.

Ridimensionate le caselle di testo come meglio credete.
Il campo ID è un contatore che viene incrementato di una unità, in modo automatico, ogniqualvolta si inserisca un nuovo record. Possiamo quindi eliminarlo dal form.

Il passo successo consiste nel fare in modo che, cliccando sul pulsante “Mostra elenco clienti” del primo form (“frmPrincipale”) venga visualizzato il secondo form (“frmClienti”).
Per far ciò, facciamo doppio clic su “frmPrincipale.vb” dalla finestra “Esplora soluzioni” quindi clicchiamo due volte sul pulsante “Mostra elenco clienti”. In questo modo Visual Basic 2005 creerà automaticamente l’evento associato alla pressione del pulsante (“btnClienti_Click”) e permetterà di inserire del codice di programmazione.
In Visual Basic 2005, ogni controllo (il pulsante o “Button” è un controllo) ha il suo evento di default. Per i pulsanti, com’è facile intuire, l’evento impostato come predefinito è il “Click”.
La lista completa di tutti gli eventi associati al controllo selezionato nella finestra di progettazione, è visionabile accedendo alla finestra delle proprietà quindi cliccando sul piccolo pulsante “Eventi”:

Classi ed oggetti
Una classe definisce un nuovo tipo estendendo le possibilità di un linguaggio di programmazione e quindi ampliando l’insieme dei tipi predefiniti. Un “tipo” può essere paragonato ad una autovettura. Ogni modello di autovettura è un “tipo” che, a sua volta, appartiene alla “classe”-autovetture.
Un “oggetto” è un’istanza di un tipo. Ogni autovettura personale che ciascuno di noi possiede è un oggetto.
Una classe è dotata di “metodi” che fotografano le azioni che la classe stessa può compiere e di “proprietà” (le proprietà descrivono le peculiarità caratteristiche di ciascuna istanza della classe).
In Visual Basic, ad esempio, la classe MessageBox può essere utilizzata per mostrare a video un messaggio informativo (simile ad uno dei tanti con i quali ci imbattiamo quotidianamente in Windows). La classe “MessageBox” dispone di un metodo Show che si occupa di “disegnare” sullo schermo la finestra del messaggio ed il suo contenuto. Ciascuna istanza della classe “MessageBox”, tuttavia, avrà dei valori diversi per quanto riguarda le sue proprietà (ogni “message box”, ad esempio, ha le sue dimensioni specifiche in termini di altezza e larghezza della finestra).

Il metodo Show è applicabile anche per i form: all’interno dell’evento “btnClienti_Click”, digitiamo quindi quanto segue:

frmClienti.Show()

Notate come non appena si prema il pulsante “.”, la tecnologia IntelliSense provveda a visualizzare tutti i metodi e le proprietà disponibili.

Provate a riavviare l’applicazione (tasto F5): adesso, cliccando sul pulsante “Mostra elenco clienti”, verrà mostrata la finestra con l’elenco dei clienti memorizzati nel database fatture.mdb. Le varie caselle di testo (Textbox) risulteranno automaticamente completate con i dati relativi al primo cliente (record) memorizzato nel database.
La barra di navigazione è un’eccellente novità introdotta in Visual Basic 2005: attraverso di essa è possibile spostarsi tra i vari recordo, aggiungerne uno nuovo, effettuare un’eliminazione, salvare le modifiche sul database. Il tutto senza digitare una sola riga di codice.

Usciamo dall’applicazione usando il tasto “X” in alto a destra.
Per centrare rispetto allo schermo anche il form “frmClienti” e per renderne impossibile il ridimensionamento, agiamo sempre sulle proprietà StartPosition e FormBorderStyle.

Il “generatore di query”

Abbiamo sinora visto come estrarre tabelle e campi d’interesse dal database creando un dataset (fattureDataSet).
I dati visualizzati, tuttavia, possono essere ulteriormente rielaborati, a seconda delle esigenze, ricorrendo all’utilizzo di query SQL e del “query builder” (“generatore di query”) di Visual Basic 2005.

Supponiamo per esempio di voler fare in modo che l’elenco dei clienti estratti dal database sia ordinato in ordine alfabetico sulla base della ragione sociale del cliente stesso.

Aprite il form “frmClienti” facendo doppio clic su “frmClienti.vb” nella finestra Esplora soluzioni, selezionate il textbox contenente la ragione sociale dei vari clienti e scegliete dal menù Dati la voce Aggiungi query. Visual Basic 2005 proporrà la finestra Generatore di criteri per la ricerca.
Attualmente, nell’area Testo della query, Visual Basic mostra l’interrogazione SQL che viene effettuata per estrarre, senza alcun criterio di selezione o di ordinamento, l’intero contenuto dei campi della tabella “Clienti” del database (SELECT ID, PIVA, CF, Ragione_sociale, Indirizzo, CAP, Citta, Provincia, [Note] FROM Clienti).

Nel campo Nuovo nome query digitate OrdinaNomeAzienda.
Chi già conosce il linguaggio SQL sa che per ordinare alfabeticamente i clienti sulla base del campo “Ragione_sociale”, è sufficiente utilizzare la query che segue: SELECT ID, PIVA, CF, Ragione_sociale, Indirizzo, CAP, Citta, Provincia, [Note] FROM Clienti ORDER BY Ragione_sociale

Il “generatore di query” (accessibile cliccando sull’omonimo pulsante) viene in soccorso di chi non conosce SQL (che comunque suggeriamo di studiare in modo approfondito). Dopo aver cliccato sul pulsante “Generatore di query”, scorrete l’elenco fino a portarvi in corrispondenza del campo “Ragione_sociale”, agite quindi sul menù a tendina “Tipo ordinamento” e scegliete la voce Crescente. Cliccando sull’area sottostante, la query SQL verrà immediatamente aggiornata aggiungendo la clausola “ORDER BY”.

Il pulsante Esegui query permette di ottenere una sorta di anteprima del risultato della query SQL.
Cliccando sul pulsante OK la query verrà aggiornata.

Premendo nuovamente OK, Visual Basic 2005 provvede ad aggiungere al progetto il nuovo oggetto OrdinaNomeAzienzaToolStrip il quale si fa carico di dotare il form “frmClienti” di una nuova barra contenente il pulsante OrdinaNomeAzienda. Facendo clic su tale pulsante, l’utente ha la possibilità di visualizzare i dati relativi all’archivio clienti in un modo differente: ordinandoli automaticamente, cioé, sulla base del contenuto del campo “Ragione_sociale”.

La stringa di testo visualizzata sul pulsante “OrdinaNomeAzienda” è ovviamente liberamente personalizzabile servendosi della proprietà Text.
Cliccando sul pulsante “OrdinaNomeAzienda”, dopo aver avviato l’applicazione (tasto F5), si può notare come i clienti vengano visualizzati in ordine alfabetico rispetto al contenuto del campo “Ragione_sociale”.

Dalla finestra di progettazione, selezioniamo l’etichetta “ID” ed il relativo textbox quindi modifichiamo la proprietà Enabled (in italiano, “abilitato”) in False: in questo modo, eseguendo l’applicazione, all’utente sarà negata la possibilità di modificare l’identificativo univoco assegnato automaticamente ad ogni cliente.

Visualizzazione delle fatture collegate al cliente selezionato.
Ci proponiamo adesso di fare in modo che l’applicazione in corso di sviluppo visualizzi, in una finestra a se stante, l’elenco delle fatture emesse relativamente al cliente selezionato.

Cominciamo con l’aggiungere un nuovo form al progetto (menù Progetto, Aggiungi Windows Form…) denominandolo frmFatture.vb.

Provvediamo quindi ad inserire un pulsante all’interno del form “frmClienti”, modifichiamone il nome in btnMostraFatture ed, in corrispondenza della proprietà Text, digitiamo Visualizza fatture.

Facciamo doppio clic sul pulsante in modo da portarci all’interno dell’evento btnMostraFatture_Click.
Qui, digitiamo la seguente riga di codice:

frmFatture.Show()

Dalla finestra Esplora soluzioni, facciamo doppio clic su frmFatture.vb, clicchiamo sulla “linguetta” Origini dati infine modifichiamo il dataset creato in precedenza aggiungendo anche le tabelle Fatture e Prestazioni.
Per far ciò è sufficiente cliccare sul pulsante Configura il dataset con la procedura guidata e spuntare le caselle visualizzate accanto alle tabelle Fatture e Prestazioni. Cliccando sul pulsante Fine il dataset sarà immediatamente aggiornato.

Visualizzare i dati con “DataGridView”

Dalla finestra Origini dati clicchiamo su Fatture quindi, dal suo menù a tendina, selezioniamo la voce DataGridView; trasciniamo – tenendo premuto il tasto sinistro del mouse – la voce Fatture sul form “frmFatture”.

Ecco un’alternativa per visualizzare i dati provenienti dal database: rispetto alla soluzione utilizzata in precedenza (uso di etichette e textbox), scegliendo DataGridView i dati vengono visualizzati servendosi di una griglia righe-colonne.

Cliccando sulla piccola icona a forma di freccia posta nell’angolo in alto a destra della griglia, lo sviluppatore ha la possibilità di regolare in modo approfondito il “comportamento” ed il “look” della tabella stessa: agendo sulle varie caselle, si può scegliere se l’utente della nostra applicazione possa aggiungere, modificare od eliminare dati e riordinare la posizione delle varie colonne.

Il link “Modifica colonne” consente di eliminare una o più colonne visualizzate nella griglia o personalizzarne l’aspetto in termini di font usati, combinazioni di colori e così via.
Un’interessante proprietà che consente di regolare i colori usati per la griglia dati è AlternatingRowsDefault personalizzabile cliccando sul pulsante “…”.

Avviamo ora la nostra applicazione premendo il tasto F5: scegliendo un cliente qualsiasi quindi premendo il pulsante Visualizza fatture, ci si accorge che la griglia precedentemente inserita nel form “frmFatture” elenca l’intero insieme di fatture in archivio ma non quelle emesse per il cliente scelto.
Chiudiamo l’applicazione quindi, dalla finestra di progettazione, facciamo doppio clic sul form “frmFatture”: Visual Basic visualizzerà contenuto dell’evento di default (“Load”).
L’evento “Load” viene caricato immediatamente all’apertura di un qualsiasi form.
E’ possibile notare come l’evento “Load” del form “frmFatture” (denominato frmFatture_Load) contenga già la seguente riga di codice:

Me.FattureTableAdapter.Fill(Me.FattureDataSet.Fatture)

Si tratta di un’istruzione che è stata automaticamente aggiunta da Visual Basic 2005 nel momento in cui abbiamo inserito il controllo DataGridView nel form “frmFatture”: grazie ad essa l’oggetto TableAdapter e quindi la griglia dati (DataGridView) viene popolata (“Fill” significa “riempire” in inglese) con il contenuto del dataset “fattureDataSet” ed, in particolare, con quello della tabella “Fatture”.

Ciò che nel nostro caso desideriamo ottenere è un comportamento leggermente differente: vogliamo che Visual Basic non inserisca nella griglia dati l’intero contenuto della tabella Fatture ma selezioni solo le fatture corrispondenti al cliente selezionato dall’utente.

La soluzione consiste nel trasmettere alla query che estrae i dati dal database un parametro. Nel nostro esempio il parametro è l’identificativo univoco (campo “ID”) associato al cliente selezionato.

Facciamo allora doppio clic sul file “frmFatture.vb” dalla finestra Esplora soluzioni quindi clicchiamo sulla piccola freccia visualizzata in corrispondenza dell’oggetto FattureTableAdapter quindi scegliamo la voce Aggiungi query:

Visual Basic proporrà la finestra “Generatore di criteri per la ricerca” nella quale già abbiamo avuto modo di imbatterci in precedenza. In corrispondenza del campo Nuovo nome query digitate FillByIDCliente e, nell’area Testo della query, aggiungete – in calce all’interrogazione – la seguente clausola WHERE:

WHERE ID_cliente = ?

Al posto del punto interrogativo (?), Visual Basic provvederà ad inserire il parametro (in questo caso, l’identificativo del cliente scelto di volta in volta dall’utente).
E’ bene sottolineare che la sintassi utilizzata per i segnaposto dei parametri può variare a seconda dell’origine dati. In questo esempio abbiamo utilizzato il punto interrogativo perché stiamo interrogando una base dati in formato Access (allo stesso modo ci saremmo dovuti comportare per una sorgente dati collegata via ODBC). Nel caso di SQL Server, come segnaposto per il parametro si dovrà usare la sintassi @nomeparametro.

La nostra query sarà quindi strutturata nel modo seguente (così apparirà nel campo Testo della query):

SELECT ID, ID_cliente, Num_fattura, Data_fattura, Pagamento, Pagata FROM Fatture WHERE ID_cliente = ?

Cliccando su OK, Visual Basic 2005 creerà automaticamente un controllo denominato FillByIDClienteToolStrip: esso aggiunge una nuova barra degli strumenti al form. Da qui l’utente potrebbe digitare manualmente l’ID di un cliente ed ottenere l’elenco di tutte le fatture correlate (potete verificare personalmente avviando l’applicazione). Ma non è questo ciò che ci interessa. Noi desideriamo che la selezione delle fatture avvenga sulla base del parametro (ID del cliente selezionato) trasmesso dal form “frmClienti”: eliminiamo, quindi, dal form “frmFatture”, l’oggetto FillByIDClienteToolStrip. Scomparirà così, immediatamente, anche la relativa “barra degli strumenti”.

Interrogazioni SQL con parametri

Dalla finestra Esplora soluzioni, fate doppio clic sul file fattureDataSet.xsd: noterete come adesso CustomerTableAdapter sia “popolabile” utilizzando due metodi ovvero Fill,GetData() e FillByIDCliente(ID_cliente): il primo è quello “standard” che seleziona tutti i dati dalla tabella “Fatture” del dataset mentre il secondo è quello appena aggiunto è che estrae i dati dalla tabella “Fatture” sulla base del parametro “ID_cliente”.

Il nostro obiettivo consiste nell’invocare proprio questo secondo metodo passandogli l’ID del cliente selezionato di volta in volta come parametro.
Per far ciò, la strada più semplice può essere la creazione di una proprietà pubblica nel form Fatture (“frmFatture.vb”). Facciamo quindi doppio clic su un’area libera del form “frmFatture”, quindi – sotto la dichirazione della classe “frmFatture” (Public Class frmFatture) – digitiamo quanto segue:

    Private m_ParametroIDCliente As Long
    Public WriteOnly Property ParametroIDCliente() As Long
        Set(ByVal value As Long)
            m_ParametroIDCliente = value
        End Set
    End Property

Modifichiamo quindi l’evento “Load” del form “frmFatture”: aggiungiamo, all’inizio dell’istruzione Me.FattureTableAdapter.Fill(Me.FattureDataSet.Fatture), un apostrofo (‘). In questo modo Visual Basic considererà tale istruzione come un commento ovvero come una nota inserita dal programmatore e non la eseguirà (i commenti, ossia le istruzioni che non vengono eseguite sono evidenziati con il colore verde).

Inseriamo, alla riga immediatamente successiva al commento, l’istruzione seguente:

Me.FattureTableAdapter.FillByIDCliente(Me.FattureDataSet.Fatture, Me.m_ParametroIDCliente)

Così facendo, “comunichiamo” a Visual Basic che il metodo da invocare per popolare la griglia dati è “FillByIDCliente” e che in ingresso a tale metodo devono essere posti il contenuto della tabella Fatture ed il parametro corrisponedente all’ID del cliente e memorizzato nella proprietà m_ParametroIDCliente del form.

Qualora fosse ancora presente, cancellate l’evento FillByIDClienteToolStripButton_Click (da Private Sub FillByIDClienteToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) al successivo End Sub), appartenente all’oggetto FillByIDClienteToolStrip poco fa eliminato.

Il form “frmFatture” è così pronto per ricevere l’identificativo del cliente selezionato dall’utente della nostra applicazione: apriamo quindi il form “frmClienti” facendo doppio clic su “frmClienti.vb” nella finestra Esplora soluzioni.

Dalla finestra di progettazione, clicchiamo due volte sul pulsante Visualizza fatture: ci si troverà all’interno dell’evento btnMostraFatture_Click. Qui, prima dell’istruzione frmFatture.Show(), che richiama il form Fatture, inseriamo la seguente riga di codice:

frmFatture.ParametroIDCliente = IDTextBox.Text

In questo modo, alla proprietà “ParametroIDCliente” del form “frmFatture” – da noi precedentemente creata – sarà assegnato il valore contenuto nella textbox denominata “IDTextBox” (si tratta della casella di testo in cui Visual Basic inserisce il valore del campo ID della tabella “Clienti” proveniente dal database).

Non appena l’applicazione sarà eseguita, quindi, scegliendo un cliente dalla relativa finestra e cliccando sul pulsante Visualizza fatture, verrà prima richiamato l’evento btnMostraFatture_Click che modificherà la proprietà “ParametroIDCliente” del form “frmFatture” attribuendole il valore contenuto nella textbox “IDTextBox”; verrà poi richiesta la visualizzazione del form “frmFatture” (frmFatture.Show()) quindi sarà eseguito il codice contenuto nell’evento “Load” del form “frmFatture” stesso (frmFatture_Load): qui il valore della proprietà sarà letto e passato al metodo che si farà carico di effettuare la query sul dataset e “riempire” la griglia dati.

Avviando l’applicazione (F5), si può controllare come adesso, scegliendo un cliente qualunque quindi cliccando sul pulsante Visualizza fatture, vengano elencate solo ed esclusivamente le fatture emesse per quello specifico cliente.

Nella prossima puntata vedremo più da vicino le metodologie per aggiungere, eliminare e modificare i dati. Implementeremo inoltre la possibilità di visualizzare, per ogni fattura in archivio, il dettaglio della stessa (tabella “Prestazioni”).

Ti consigliamo anche

Link copiato negli appunti