2

Jan

AD – Demo 3 – Disconnected data: Dataset

In questa demo vedremo come è immediato fare una operazione che molti sviluppatori di fine anni 90 cominciavano a fare all’inizio dei loro progetti, per creare l’infrastruttura necessaria per l’accesso ai dati dei loro sistemi. Le somiglianze tra oggi ed allora sono interessanti, poichè da sempre lo sviluppatore ha cercato di rendere l’accesso ai dati il più generale possibile, interponendo ove possibile uno strato di astrazione che lo potesse togliere da insidiosi tranelli legati alla concorrenza sui dati e da molti altri problemi.

Oggi operiamo un procedimento che è molto simile ad un ORM, solo meno elastico e soggetto a pesanti vincoli, da reputare normali considerando che i Dataset ormai avranno almeno 7-8 anni. La prima necessità di uno sviluppatore è quella di poter reperire i suoi dati, manipolarli indefinitamente per quanto tempo sia necessario, per poi aggiornarli sulla base di dati.

Microsoft aveva intuito questa necessità già prima dell’avvento degli ORM, e ha costruito questa infrastruttura disconnessa, i dataset appunto, per creare un layer di astrazione da lo sviluppatore e la fonte dati.

Il dataset

Come funziona? Noi abbiamo visto che i dati possono essere ciclati da un DataReader. Tuttavia, per definizione il DR legge, non permette la modifica, cicla solo in avanti (eccetto rari casi). Perciò, come di consueto, si frappone una classe, il DataAdapter, che si preoccupa di gestire le operazioni di select, insert, delete e update su una tabella (semplificando). A questo punto Visual Studio ci permette di generare dinamicamente, inferendolo dallo schema del database, tutte le classi necessarie alla creazione di questo Adapter specifico per la tabella/tabelle che vogliamo aggiungere. Inoltre, fatto questo crea per ogni tabella (e quindi per ogni adapter) una DataTable che rifletta i campi della tabella originale sul DB.

NOTA: farlo è 100 volte più semplice che dirlo, quindi passiamo alla pratica.

Questa volta ci colleghiamo ad un Database MySQL (operazione indolore, previa installazione del connector per .NET) e creiamo un nuovo progetto Windows Forms. Successivamente aggiungiamo un dataset vuoto e, dal Server Explorer, trasciniamo la tabella voluta, direttamente sul dataset:

image

Il risultato, come in figura, sarà la creazione dinamica di tutta una serie di classi che mapperanno la tabella DB in modo da creare un layer di classi C# per utilizzare e manipolare i dati in maniera disconnessa e fortemente tipizzata.

La view

A questo punto possiamo già collegare il nostro tableAdapter con un controllo databound sulla form. Nel nostro caso, apriamo la form di default e trasciniamo una datagridview e scegliamo la sorgente dati appena creata come fonti dati (in figura):

image

Provate a fare F5, e già potrete visualizzare la griglia con tutti i dati.

Filtrare i dati – Aggiunta di query nel TableAdapter

Supponiamo di voler utilizzare questa infrastruttura, che finora ci ha permesso di fare vedere una griglia dati senza scrivere codice, per filtrare i dati per il campo post_status; per esempio per visualizzare solo i post che hanno lo status “publish”. Nota: stiamo usando un database reale di wordpress.

image Quindi, torniamo al dataset e, sulla TableAdapter interessata con il destro scegliamo Add Query…

A questo punto scriviamo la query di interesse o usiamo il query editor (ci vorrebbero pagine e pagine solo per questo miracoloso tool):

image

e confermiamo. VS avrà creato un metodo corrispondente alla vostra query che addirittura si prende un parametro del tipo dati corretto (il tutto intuito dalla query sql che avete scritto).

Infine potete modificare la riga del form load, oppure aggiungere un bottone per filtrare i dati, e vi basterà la seguente riga di codice per popolare i dati della griglia con la nuova query:

image

TADAN!!!

by Simona Cossidente on 1/2/2010