C# utilizzo del database LiteDB con .Net 6

Articolo introduttivo alla gestione di un database LiteDB con .Net 6 e linguaggio di programmazione C#.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo vedremo come utilizzare il database LiteDB https://www.litedb.org/ con la tecnologia .Net 6 ed il linguaggio di programmazione C# tramite l’ambiente di sviluppo Visual Studio 2022.
L’articolo vuole fornisce una panoramica sulle operazioni più comuni che si fanno su un database, quali operazioni di Inserimento, modifica, lettura e cancellazione dei dati, detto CRUD.
Il database LiteDB è una dll molto leggera che permette di dotare le proprie applicazione di una gestione dei dati in forma multi piattaforma e senza installare drive o altri programmi per la relativa gestione.

Creazione del progetto

Si crea un nuovo progetto di tipo “App Windows Forms” impostando un nome di proprio piacimento e selezionando la versione del Framework a 6.
Dopo ave creato il progetto, inserire nella forma un controllo di tipo “DatagrdiView” impostando la proprietà “Name” in “DtgDati” due controlli di tipo “Label” per l’intestazione delle caselle di testo, due controlli di tipo “Caselle di testo” con la proprietà “Name” impostata in una a “TxtNome” e l’altra in “TxtCognome”, ed infine i tre pulsanti per la gestione di inserimento, modifica e cancellazione dei dati,  il tutto come mostrato in figura 1.
 

La forma per la gestione dei dati di LiteDB

Figura 1 – l’interfaccia grafica per la gestione dei dati

Stesura del codice


Dopo aver impostato i vari controlli per la gestione dei dati, non resta che aggiungere al progetto le classi ed i riferimenti al database di tipo “LiteDB”.
Dalla casella di nuget per l’esecuzione da riga di comandi, scriviamo le istruzioni per aggiungere le classi per la gestione del database.
Eseguire il comando qui di seguito per aggiungere i riferimenti a “LiteDB”.

Install-Package LiteDB

Dopo aver impostato lo spazio dei nomi per la gestione di LiteDB, occorre scrivere il codice.
Facciamo doppio click sulla form, in modo da passare in visualizzazione codice nell’evento load della form.
In alto sopra ad ogni dichiarazione, aggiungiamo lo spazio dei nomi per gestire le varie classi.
Qui di seguito la dichiarazione dello spazio dei nomi per “LiteDB”.

C#

using LiteDB;

Dopo aver aggiunto il riferimento alle classi per la gestione del database, dobbiamo scrivere il codice per eseguire le varie operazioni CRUD.
Prendendo come esempio il modello di Entity Framework, anche in questo caso le tabelle saranno mappate nelle varie classi.
Supponiamo che vogliamo gestire i dati anagrafici di una persona, quale Id contatore, Nome e cognome, queste proprietà saranno le colonne della tabella al quale sarà assegnato il nome della classe.
Di seguito si riporta il frammento di codice della classe per la gestione dei dati, da inserire fuori della classe “form” ma sempre nello spazio dei nomi.

C#
public class Angrafica
{
public Int32 Id { get; set; }
public string Nome { get; set; }
public string Cognome { get; set; }
}

Si crea adesso una funzione che sarà richiamata dai vari pulsanti ed eventi,  che permette il caricamento dati nella griglia. La funzione sarà richiamata nell’evento load della form, e negli eventi click di ogni singolo pulsante.
La gestione dei dati avviene tramite un oggetto di tipo “LiteDatabase” che passando il percorso e nome del database lo crea oppure lo inizializza qualora è già presente. Tramite il metodo GetCollection, passando il nome della classe, mappiamo le informazioni tra la classe e la tabella che verrà creata qualora non esista.
Tramite il metodo Query, viene effettuata una selezione dei dati corrispondente al comando SQL di tipo “Select * From NomeTabella”, mentre con il metodo “ToList()” viene restituita la lista dei dati.
Qui di seguito si riporta il frammento di codice delle suddette operazioni.

C#
private void CaricaDati()
{
try
{
using (var db = new LiteDatabase(@"C:\Varie\Dati.db"))
{
//Apre il db e se non esiste lo crea - Carica tutti i dati di tipo Anagrafica
var Dati = db.GetCollection<Angrafica>("Angrafica");
//Carica i dati nel controllo DataGrid, tramite il metodo Query effettu
DtgDati.DataSource = Dati.Query().ToList();
}
TxtCognome.Text = "";
TxtNome.Text = "";
}
catch (LiteException ex)
{
MessageBox.Show(ex.Message);
}
}

Torniamo in visualizzazione grafica ed eseguiamo l’applicazione per vedere se funziona.
Verificato il corretto funzionamento, non resta che scrivere il codice per l’inserimento dei dati.
Facciamo doppio click sul pulsante con il testo “Inserisci” in modo da passare in visualizzazione codice nell’evento click.
Anche in questo caso, bisogna come sempre effettuare un collegamento al database, ed avviene tramite la classe “LiteDatabase”, una volta effettuata la connessione si crea un oggetto di tipo “Anagrafica” che è la classe che mappa la tabella presente nel database, e valorizziamo i campi (nome, e cognome), a questo punto, tramite il metodo “Insert” dell’oggetto di tipo “IliteConnection” che è un insieme di oggetti della classe “Anagrafica” verrà effettuato l’inserimento del record.
Qui di seguito si riporta il frammento di codice delle suddette operazioni, per l’evento click del pulsante “Inserisci”.

C#
private void BtnInserisci_Click(object sender, EventArgs e)
{
using (var db = new LiteDatabase(@"C:\Varie\Dati.db"))
{
//creo oggetto per l'inserimento dati
var NuovoRecord = db.GetCollection<Angrafica>("Angrafica");
//Valorizzo con i dati
var utente = new Angrafica
{
Cognome = TxtCognome.Text,
Nome = TxtNome.Text
};
//Inserisco
NuovoRecord.Insert(utente);
}
CaricaDati();
return;
}

Ora non resta che eseguire la nostra applicazione, inserire dei dati nelle caselle di testo, e fare click sul pulsante “Inserisci”, dovremmo vedere di volta in volta l’inserimento dei dati nel controllo Griglia.
Passiamo in visualizzazione grafica, e facciamo doppio click sul pulsante “Aggiorna” in modo che passiamo in visualizzazione codice nell’evento click del pulsante.
La modifica dei dati, avviene selezionando il record interessato, ed impostato le proprietà dell’oggetto (classe Anagrafica) che rappresenta la tabella nel database.

Dopo aver effettuato la connessione alla fonte dati, tramite la classe “LiteDatabase”, si crea un oggetto di tipo “IliteCollection” , che rappresenta i record presenti nella tabella e tramite il metodo “Query” si effettua una ricerca dei dati, filtrando per il campo “Id”, tramite Where.
Una volta ottenuto il record, si modificano le proprietà “Nome” e “Cognome”, e tramite il metodo “update” dell’oggetto di tipo “ILiteCollection”, si aggiornano i dati.
Di seguito il frammento di codice delle suddette operazioni.

C#
private void BtnAggiorna_Click(object sender, EventArgs e)
{
try
{
if (DtgDati.SelectedRows.Count < 1)
{
MessageBox.Show("Selezionare almeno un record");
return;
}
Int32 idRecord = Convert.ToInt32(DtgDati.SelectedRows[0].Cells[0].Value);
using (var db = new LiteDatabase(@"C:\Varie\Dati.db"))
{
//creo oggetto per aggiornamento dati
var Dati = db.GetCollection<Angrafica>("Angrafica");
var recordDaAggiornare = Dati.Query().Where(p=>p.Id == idRecord).FirstOrDefault();
if (recordDaAggiornare != null)
{
//Valorizzo con i dati
recordDaAggiornare.Nome = TxtNome.Text;
recordDaAggiornare.Cognome = TxtCognome.Text;
//aggiorno
Dati.Update(recordDaAggiornare);
}
}
CaricaDati();
}
catch (LiteException ex)
{
MessageBox.Show(ex.Message);
}
}

Ora non resta che seguire il programma, e nella casella nome e cognome, inseriamo dei valori e dopo aver selezionato una riga nella griglia, facciamo click sul pulsante “Aggiorna”, vedremo la griglia aggiornarsi con i nuovi dati.

Siamo giunti all’ultimo esempio di codice, quello relativo alla cancellazione dei dati, in particolare per cancellare un record di una determinata tabella dobbiamo utilizzare il metodo “Delete” dell’oggetto di tipo “ILiteCollection” lo stesso che abbiamo utilizzato nel precedente frammento di codice, quello relativo all’aggiornamento dei dati, passando come parametro il valore del campo chiave (in questo caso ID).
In particolare dopo aver effettuato la connessione alla fonte dati tramite “LiteDatabase”, si crea un oggetto di tipo “IliteCollection” tramite il metodo “GetCollection, e tramite il metodo “Delete” si passa il valore della colonna del campo chiave.
Se invece vogliamo eliminare tutti i record della tabella, possiamo utilizzare il metodo “DeleteAll” anziché il metodo “Delete” che svuota la tabella di tutti i dati.
Di seguito il frammento di codice delle suddette operazioni da inserire nell’evento click del pulsante “Elimina”.

C#
private void BtnElimina_Click(object sender, EventArgs e)
{
try
{
if (DtgDati.SelectedRows.Count < 1)
{
MessageBox.Show("Selezionare almeno un record");
return;
}
Int32 idRecord = Convert.ToInt32(DtgDati.SelectedRows[0].Cells[0].Value);
using (var db = new LiteDatabase(@"C:\Varie\Dati.db"))
{
//Apre il db e se non esiste lo crea
var Dati = db.GetCollection<Angrafica>("Angrafica");
bool risultato = Dati.Delete(idRecord);
}
CaricaDati();
}
catch (LiteException ex)
{
MessageBox.Show(ex.Message);

}
}

Ora non resta che eseguire il programma, e dopo aver selezionato una riga nella griglia, facciamo click sul pulsante “Elimina”, vedremo che il record non sarà più presente.

Conclusioni

L’articolo ha voluto fornire al lettore una panoramica ed introduzione sull’utilizzo di questo particolare database di dimensioni molto ridotte e di portabilità molto interessanti per applicazioni su multi piattaforma, fornendo al lettore le operazioni più comuni sulla gestione dei dati.
Per chi sviluppa con la metodologia Entity Framework non troverà difficoltà ad usare quel tipo di approccio nello sviluppare applicazioni.
Il codice dell’articolo si può utilizzare anche per altre tipologie di progetti, come in ambito  web.
L’articolo è dedicato all’amico Pasquale che mi ha fatto conoscere questo database e che il suo entusiasmo per le tecnologie mi coinvolge sempre più, un ragazzo dalla grande passione per le tecnologie e video giochi.