Difficoltà: conoscenze di base di VB.NET e ADO.NET.
Questo progetto di esempio non utilizzate alcun DataSet, ma un semplice DataReader (oltre ovviamente ad un DataTable) per caricare i dati in un DataGridView.
Inoltre, facendo largo uso di OleDbCommand, uniti a transazioni, sono implementati tutti i comandi SQL come SELECT, INSERT, UPDATE e DELETE.
Il database di esempio, incluso nel progetto, è il classico BIBLIO.MDB (in versione Access 2000) di cui ho modificato la tabella Authors aggiungendo un campo di tipo DateTime che è assente in tutte le tabelle, al fine di mostrare la modifica dei dati di tipo TESTO, NUMERICO, DATA-ORA e MEMO così da avere un ventaglio di tipi di dati cui possiate fare riferimento per spunti.
In pratica, il progetto è composto da tre form: frmMain (il form principale) e i due form di modifica frmAuthor e frmPublisher, ed altri moduli accessori.
Il frmMain contiene il DataGridView che viene popolato con i dati di una SELECT eseguita sulla tabella Authors oppure, alternativamente, sulla tabella Publishers, grazie al pulsante Connect .
Grazie agli altri tre pulsanti di frmMain, Add New, Open e Delete è possibile eseguire le operazioni di inerimento, modifica e cancellazione di un record.
Oltre al pulsante Open, per modificare un record è possibile anche fare doppio-clic sulla riga nel DataGridView, oppure premere Invio. Insomma, sono implementate tutte le modalità possibili.
Si aprirà il form di modifica della riga selezionata nel DataGridView, ovviamente relativa alla tabella caricata.
Il tutto può avvenire grazie alla lettura dell'ID che è presente nella prima colonna, nascosta, del DataGridView, che sarà passato come parametro alle routine che si incaricano di caricare i dati del record dalla tabella.
Tutti gli INSERT e gli UPDATE dei record sono eseguiti all'interno dei relativi form in cui vediamo (vedi immagine) tre pulsanti New e Save
In caso di modifica dei dati, alla pressione del pulsante Save si chiude automaticamente la finestra di modifica, e la griglia sarà aggiornata istantaneamente con i nuovi valori.
Se invece si fa clic su New, i campi vengono azzerati per l'inserimento di un nuovo record. Logicamente, se il record caricate in quel momento è stato modificato, ci verrà chiesto se confermare o meno le modifiche, oppure annullare e continuare la modifica.
Tutti i comandi SQL non sono sparsi tra il codice dei form, ma sono invece 'depositati' in un'unica classe clsSQL; questo permette una più agevole modifica dei comandi stessi.
Pensiamo ad esempio se dovessimo migrare il nostro applicativo su database SQL Server, Oracle, DB2, ecc.
Sarà sufficiente fare una copia di questa classe ed apportare le poche correzioni necessarie agli enunciati SQL senza essere costretti a cercarli, magari sparsi per tutto il progetto.
Personalmente lo trovo assai comodo e, oltretutto, permette di ottimizzare il codice perchè conservando tutto in una classe si eviterà di creare doppioni di procedure più o meno simili..
Concludo dicendo che, ovviamente, questo è solo un progetto didattico di esempio che serve a dimostrare come sia possibile con veramente poche righe di codice creare una piccola applicazione, senza grosse pretese, ma che può poi essere ulteriormente elaborata.
Naturalmente il progetto può essere notevolmente migliorato, ad esempio con funzionalità più o meno avanzate di ricerca, form Master-Details, reportistica, multi-utenza, ecc. ma ciò esula da questo articolo che ha il solo scopo di mostrare l'accesso ai dati semplice, veloce, efficacie e senza vincoli.