Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_la-gestione-del-database-sqlite-con-operazioni-crud_1719.aspx
In questo articolo vedremo come utilizzare il database SQLite in ambito Windows Application con il linguaggio di programmazione C# e la versione di .Net 4.8 con l’ambiente di sviluppo Microsoft Visual Studio community 2019.
In particolare prendendo spunto dall’articolo precedente qui https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_net-utilizzo-del-database-sqlite-in-windows-application_1717.aspx nel quale veniva fatta l’introduzione di questo database, in questo articolo vedremo le operazioni di Inserimento, Cancellazione, modifica e Lettura, le cosiddette operazioni CRUD.
Il database SQLite può tornare utile anche nelle applicazioni per smarthpone, ma in questo articolo vedremo come semplifica il rilascio in varie postazioni.
Creazione del progetto CRUD per SQLite
Si crea un nuovo progetto di tipo Windows application, selezionando il linguaggio di programmazione C#.
Tralasciando l’installazione e l’aggiunta di componenti per la gestione del database SQLite, che sono riportati in questo https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_net-utilizzo-del-database-sqlite-in-windows-application_1717.aspx precedente articolo, vedremo come gestire le operazioni CRUD.
Inseriamo nella form, un controllo di tipo Datagridview, che visualizzerà i dati, due caselle di testo, con il quale andiamo ad impostare il valore o modificare, due controlli label per mettere il titolo alle caselle e tre controlli di tipo button, con in quale si andrà a fare le seguenti operazioni, inserimento, modifica e cancellazione, il tutto come mostrato in figura 1.
Figura 1 – La form con i vari controlli
Come database e tabelle, faremo riferimento a quello del precedente articolo, con la tabella anagrafica composto da tre colonne, quali ID, che è l’identificativo di tipo autoincrement, nome e cognome.
A questo punto tramite Entity Framework, aggiungiamo il modello.
Stesura del codice
Vedremo in questi passi come creare il codice per effettuare le operazioni comuni sulla gestione dei dati, nel precedente articolo si è visto come caricare i dati, che ripeteremo anche qui.
Passiamo in visualizzazione codice, nella classe in una qualunque parte, inseriamo una funzione per il caricamento dati.
Qui di seguito l’esempio di codice delle suddette operazioni.
private void
CaricaDati()
{
try
{
mainEntities entita = new
mainEntities();
var risultato = (from Dati in
entita.Anagrafica select Dati).ToList();
DtgDati.DataSource = risultato;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Ora passiamo in visualizzazione codice e facciamo doppio click sulla form in modo da passare in visualizzazione codice nell’evento LOAD.
In questo evento dobbiamo richiamare la funzione appena creata, qui di seguito il frammento di codice.
private void
Form1_Load(object sender, EventArgs e)
{
CaricaDati();
}
Terminata questa parte, andiamo in visualizzazione grafica della nostra form, e facciamo doppio click sul pulsante “Inserisci” in questo modo si passerà all’evento click del pulsante.
Il codice è molto semplice e riguarda la possibilità di creare un nuovo oggetto Anagrafica ed aggiungerlo alla classe Anagrafica.
Qui di seguito il frammento di codice delle operazioni, per l’inserimento di un record.
private void btnNuovo_Click(object sender,
EventArgs e)
{
try
{
Anagrafica NuovaAnagrafica =
new Anagrafica();
NuovaAnagrafica.Nome =
TxtNome.Text;
NuovaAnagrafica.Cognome =
TxtCognome.Text;
mainEntities entita = new mainEntities();
entita.Anagrafica.Add(NuovaAnagrafica);
entita.SaveChanges();
TxtNome.Text = "";
TxtCognome.Text = "";
CaricaDati();
}
catch (Exception ex)
{
MessageBox.Show("Errore:
" + ex.Message);
}
}
Da notare che quando si crea la tabella, con un campo ID chiave, questo dev’essere autoincrement, in modo che non bisogna impostare il valore, altrimenti verrà generato un errore.
Possiamo eseguire il nostro frammento di codice e verificare se l’inserimento avviene correttamente.
Dalla visualizzazione grafica, facciamo doppio click sul pulsante “Elimina” in modo che passiamo in visualizzazione codice nell’evento click del pulsante.
Verifichiamo se è stato selezionato un record, in caso di no, visualizza un messaggio, altrimenti chiediamo all’utente se è certo.
La cancellazione del record avviene tramite il metodo “Remove” della tabella, selezionando il dato tramite il campo chiave.
Qui di seguito le suddette operazioni.
private void
BtnElimina_Click(object sender, EventArgs e)
{
if (DtgDati.SelectedRows.Count <
1)
{
MessageBox.Show("Selezionare almeno un record");
return;
}
if (MessageBox.Show("Si è
certi di voler eliminare il record selezionato?", "",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
try
{
mainEntities entita = new
mainEntities();
Int32 idRecord =
Convert.ToInt32(DtgDati.SelectedRows[0].Cells[0].Value);
var risultato = (from Dati
in entita.Anagrafica where Dati.Id == idRecord select Dati).FirstOrDefault();
entita.Anagrafica.Remove(risultato);
entita.SaveChanges();
CaricaDati();
}
catch (Exception ex)
{
MessageBox.Show("Errore: " + ex.Message);
}
}
}
Ora eseguiamo il nostro codice e verifichiamo che tutto funziona correttamente.
Passiamo in visualizzazione grafica della nostra form, dobbiamo intercettare l’evento di selezione riga del controllo datagrid, in modo che i dati vengono copiati nelle caselle di testo.
Per l’evento “SelectionChanged” nella finestra proprietà, facciamo doppio click, in modo che visualizza la parte di codice, in questo evento andremo a copiare i dati selezionati nelle caselle.
private void
DtgDati_SelectionChanged(object sender, EventArgs e)
{
if (DtgDati.SelectedRows.Count >
0)
{
TxtCognome.Text =
DtgDati.SelectedRows[0].Cells[1].Value.ToString();
TxtNome.Text =
DtgDati.SelectedRows[0].Cells[2].Value.ToString();
}
}
Ora non ci resta che passare in visualizzazione grafica e fare doppio click sul pulsante “Modifica” in modo che passiamo in visualizzazione codice nell’evento click del pulsante.
In questo evento, scriviamo il codice per modifica i dati.
Dopo aver selezionato l’oggetto con il campo id chiave, si impostano le proprietà e tramite il metodo “SaveChange” dell’oggetto entity salveremo il dato.
Qui di seguito l’esempio di codice delle suddette operazioni.
private void
BtnModifica_Click(object sender, EventArgs e)
{
if (DtgDati.SelectedRows.Count >
0)
{
try
{
Int32 idRecord =
Convert.ToInt32(DtgDati.SelectedRows[0].Cells[0].Value);
mainEntities entita = new
mainEntities();
var AnagraficaTrovata =
entita.Anagrafica.Where(p => p.Id == idRecord).FirstOrDefault();
AnagraficaTrovata.Nome =
TxtNome.Text;
AnagraficaTrovata.Cognome =
TxtCognome.Text;
entita.SaveChanges();
CaricaDati();
}
catch (Exception ex)
{
MessageBox.Show("Errore: " + ex.Message);
}
}
}
Ora non resta che eseguire il nostro applicativo per effettuare tutte le operazioni di inserimento, modifica e cancellazione.
Conclusioni
Il database Sqlite, può tornare utile in molti contesti, soprattutto per applicazioni Windows Application, nel quale si vuole facilitare la distribuzione del programma, ad un utenza che ha poca dimestichezza con le tecnologie.
Un database che a differenza di tanti altri, non necessità di installazione server o comunque di altro software visto che è tutto racchiuso nel file di tipo .db.