.Net la gestione del database Microsoft Access tramite VB.Net e C# - seconda parte

Seconda parte del progetto gestionale Windows Application sull'utilizzo di Microsoft Access con la tecnologia .Net.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Continua la serie di articoli riguardante la gestione di un database Microsoft Access 2016 utilizzando la tecnologia .Net tramite i linguaggi di programmazione VB.Net e C#.
Dopo aver visto nella prima parte qui https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_net-la-gestione-del-database-microsoft-access-2016-tramite-vbnet-c_1677.aspx la realizzazione di un database, che come indicato è la parte più importante nel realizzare applicativi, in questa penultima parte capire il codice .Net che andremo ad utilizzare nei vari linguaggi di programmazione. Il tutto come sempre in un ambiente di tipo “Windows Application” ma il codice si può utilizzare anche in ambiente web come Asp.Net e Asp.Net MVC.

Creazione del progetto


Ora non ci resta che creare il nostro primo programma, aprite l’ambiente di sviluppo che può essere Visual Studio 2019 community o altre versione.
Si crea un nuovo progetto di tipo “Desktop” selezionando il modello “App Windows Forms” il tutto come mostrato in figura 1.

Figura 1 – La scelta del modello.

Dopo aver selezionato il modello, facciamo click sul pulsante “Avanti” nella finestra successiva, figura 2, dobbiamo impostare il nome del progetto e dove poterlo salvare.
Nella casella Nome progetto impostiamo il nome del progetto, che poi sarà quello della soluzione, la soluzione è una raccolta di progetti.
Il campo “Percorso” indica dove salvare i file che verranno generati.
Come versione Framework, usiamo l’ultima, in questo caso la versione Framework 4.8.

Figura 2 – La finestra con le impostazioni del progetto.


A questo punto, in basso a destra facciamo click sul pulsante “Crea”.


Verrà visualizzata una form al quale andremo ad inserire i vari controlli.
A questo punto apriamo la tabella “Clienti” del database che abbiamo creato e lo valorizziamo con dei nostri valori a nostro piacimento.
Terminata questa operazione torniamo nel progetto Visual studio e inseriamo i controlli.
Le operazioni che andremo a vedere sono inserimento, modifica, caricamento dei dati e cancellazione, naturalmente in maniera molto semplice perché altrimenti avremmo dovuto estendere la guida.
Le operazioni verranno effettuate in una sola form, ma per buona prassi andavano fatti in form diversi e quindi altre due finestre.
Potremmo gestire la base dati anche con le relazioni, ma per non allungare troppo il tutorial l’argomento non viene trattato, anche se le tabella vanno messe in relazioni in qualunque database relazionare che si sta utilizzando.
Nella form dobbiamo inserire una serie di controlli che ci permetteranno di gestire i dati, in particolare dobbiamo aggiungere un controllo di tipo griglia per la presentazione dei dati, è questo è un Datagridview, con la proprietà “Name” impostato con il valore “DtgDati” nel quale ci saranno i dati delle tre tabelle recuperate tramite l’istruzione Select.
Due controlli cornice che rappresentano i campi relativi alle fatture e ordine.
Avremo due controlli caselle combinate, ossia combobox, con il quale rappresentano una clienti ed avrà la proprietà Name impostato su “CmbClienti” ed una relative alle fatture denominata “CmbFatture”.
Una serie di controlli label che rappresentano i titoli per le varie caselle di testo ed altri controlli, un controllo datapicket, 9 controlli di tipo caselle di testo, e 7 pulsanti.
I controlli di tipo caselle di testo, avranno l’iniziale di tipo txt, quindi la descrizione sarà txtdescrizione e così via.
Mentre per i controlli di tipo pulsante, avranno l’iniziale di tipo btn, quindi per il pulsante inserisci sarà denominato “btnInserisci”.

L’interfaccia sarà come quella mostrata in figura 3


Figura 3 – L’interfaccia grafica


Stesura del codice


Siamo arrivati alla parte che più interessa e piace ogni sviluppatore quella della stesura del codice.
La gestione dei dati avviene tramite la tecnologia Ado.Net, questo perché Entity Framework che spesso si usa per gestire le varie fonti dati, non è possibile utilizzarlo con Microsoft Access.
In particolare utilizzeremo lo spazio dei nomi oledb.

Facciamo doppio click sulla form, e passiamo in visualizzazione codice.
In alto sopra ad ogni dichiarazione, scriviamo il riferimento a tale spazio dei nomi.
Qui di seguito la dichiarazione per entrambi i linguaggi di programmazione.

VB.Net
Imports System.Data.OleDb
C#
using System.Data.OleDb;


Sempre rimanendo in visualizzazione codice, dopo l’evento load della form che è stato generato nel momento in cui abbiamo fatto doppio click, dobbiamo creare una funzione che richiama una funzione per il caricamento dei dati.
Qui di seguito la funzione dei caricamento dati, per entrambi i linguaggi.

VB.Net
Private Sub CaricaDati()
Try
'carico le combobox
Using sqlConnessione As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Dati\Dati.accdb")
sqlConnessione.Open()
Using CommandSql As New OleDbCommand("Select ID, Denominazione FROM Clienti", sqlConnessione)
Using dtaAdapter As New OleDbDataAdapter(CommandSql)
Using dttDati As New DataTable()
dtaAdapter.Fill(dttDati)
cmbClienti.ValueMember = "ID"
cmbClienti.DisplayMember = "Denominazione"
cmbClienti.DataSource = dttDati.DefaultView
End Using
Using dttDati As New DataTable
dtaAdapter.SelectCommand = New OleDbCommand("Select ID, NumeroFattura FROM Fatture", sqlConnessione)
dtaAdapter.Fill(dttDati)
cmbFattura.ValueMember = "ID"
cmbFattura.DisplayMember = "NumeroFattura"
cmbFattura.DataSource = dttDati.DefaultView
End Using
Using dttDati As New DataTable
dtaAdapter.SelectCommand = New OleDbCommand("SELECT fat.*, cli.*, ord.*  FROM ((Fatture fat left join Clienti cli on fat.idclienti = cli.id) left join ordini ord on fat.id = ord.idfattura)", sqlConnessione)
dtaAdapter.Fill(dttDati)
DtgDati.DataSource = dttDati
End Using
End Using
End Using
End Using
Catch ex As Exception
MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
C#
private void CaricaDati()
{
try
{
// carico le combobox
using (OleDbConnection sqlConnessione = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Dati\Dati.accdb"))
{
sqlConnessione.Open();
using (OleDbCommand CommandSql = new OleDbCommand("Select ID, Denominazione FROM Clienti", sqlConnessione))
{
using (OleDbDataAdapter dtaAdapter = new OleDbDataAdapter(CommandSql))
{
using (DataTable dttDati = new DataTable())
{
dtaAdapter.Fill(dttDati);
cmbClienti.ValueMember = "ID";
cmbClienti.DisplayMember = "Denominazione";
cmbClienti.DataSource = dttDati.DefaultView;
}
using (DataTable dttDati = new DataTable())
{
dtaAdapter.SelectCommand = new OleDbCommand("Select ID, NumeroFattura FROM Fatture", sqlConnessione);
dtaAdapter.Fill(dttDati);
cmbFattura.ValueMember = "ID";
cmbFattura.DisplayMember = "NumeroFattura";
cmbFattura.DataSource = dttDati.DefaultView;
}
using (DataTable dttDati = new DataTable())
{
dtaAdapter.SelectCommand = new OleDbCommand("SELECT fat.*, cli.*, ord.*  FROM ((Fatture fat left join Clienti cli on fat.idclienti = cli.id) left join ordini ord on fat.id = ord.idfattura)", sqlConnessione);
dtaAdapter.Fill(dttDati);
DtgDati.DataSource = dttDati;
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

Sempre rimanendo in modalità codice, nell’evento load della form dobbiamo richiamare la funzione appena creata.

VB.Net
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
CaricaDati()
Catch ex As Exception
MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
C#
private void Form1_Load(object sender, EventArgs e)
{
CaricaDati();
}

Ora non ci resta che testare il nostro programma eseguendo il progetto e se noteremo che all’apertura della form non sono presenti i dati.
Naturalmente dobbiamo impostare il percorso del database Microsoft Access nella connectionstring.
Come si è visto dai frammenti di codice precedenti, si creano diversi oggetti per la gestione dei dati, in particolare un oggetto di tipo oledbconnection con il quale andremo ad effettuare la connessione alla base dati, un oggetto di tipo oledbcommand con il quale faremo le query di select, ossia di lettura delle tabelle per il caricamento dei dati nella griglia, e delle relative combobox, un oggetto di tipo oledAdpater che esegue la query e valorizza un oggetto di tipo DataTable per la valorizzazione della griglia e delle caselle combinate.
Le query di relazione ossia quelle con il quale si prendono i dati da più tabelle in Microsoft Access, si devono utilizzare le parentesi tonde, in questo caso sono tre tabelle.

Conclusioni


In questo articolo abbiamo impostato  l’applicazione di tipo Windows Application, anche se andava affrontata in maniera diversa, con l’aggiunta di più finestre, ma questo comportava la descrizione tecnica e soprattutto lunga al quale lettore poteva essere dispersiva, invece si è cercato di rendere la guida più sintetica possibile permettendo di evidenziare i concetti base al quale sono utilizzati in ogni realizzazione di programma gestionale.
La tecnica del caricamento dei dati con le classi che sono state utilizzate è lo stesso che si utilizza anche per applicazioni web, con la tecnologia Asp.Net.

Nel prossimo ed ultimo articolo affronteremo l’inserimento, cancellazione e modifica dei dati.