Lo strano caso di un DataSet Tipizzato 2° parte

Nel post precedente abbiamo visto un po’ la differenza tra le due componenti che compongono ADO.NET.

Abbiamo anche detto che un DataSet Tipizzato, può essere un’ottima scelta nel caso sia definito a priori il numero e quali tabelle del DB lo compongono, esso descrive un ben preciso schema, e permette di lavorare in modalità disconnessa.

Per creare un DataSet tipizzato, ovviamente dopo aver creato tutte le tabelle che comporranno il nostro Data Base, in un qualsiasi DBMS, bisognerà aggiungere al nostro progetto un file .xsd, al suo interno potremmo cosi aggiungere due oggetti fondamentali per la gestione delle tabelle, i DataTable e i TableAdapter.

L’aggiunta di tali componenti al DataSet è facilitata dalla creazione guidata.

Quindi gli step da seguire per la creazione di un DataTable/TableAdapter nel file .xsd sono:

1)Aggiungere un TableAdapter.

tableAdapter

2) Settare la connessione al Db e testarla con l’apposito pulsante.

clip_image002[7]

3) Utilizzare la funzione creazione guidata per la creazione del TableAdapter, selezionando la tabella per la quale creare il TableAdapter sarà possibile definire una query di Fill (query di select per la definizione dello schema del DataTable)

clip_image002[9]

I DataTable non sono altro che una copia in locale delle tabelle del Db, essi sono formati da tre elementi DataColumn, DataRow e DataConstrain, in ordine le colonne che compongono una tabella, le righe contenute in una tabella e i vincoli riguardanti le colonne.

clip_image007

Il DataTable è, comunque, possibile usarlo come oggetto distaccato dal DataSet, quindi esso non è un oggetto esclusivo del DataSet tipizzato, ma si può dichiarare anche da codice nella seguente maniera:

‘VB

DIM nuovoDataTable As New DataTable

// C#

DataTable nuovoDataTable = New DataTable;

Inoltre, una volta creato un DataTable nel DataSet tipizzato si può instanziare un oggetto di tale classe da codice.

‘ VB

DIM nuovoDataTable As New DataSetTipizzato.DataTable

// C#

DataSetTipizzato.DataTable nuovoDataTable = New DataSetTipizzato.DataTable

Stessa cosa vale per i DataRow di un DataTable tipizzato, è possibile instanziare un oggetto del tipo DataRowTipizzato alla stessa maniera del DataTable.

‘ VB

DIM nuovoDataRow As New DataSetTipizzato.DataRowTipizzato

// C#

DataSetTipizzato. DataRowTipizzato nuovoDataRow = New DataSetTipizzato. DataRowTipizzato

Vi potreste domandare “A cosa può servirmi instanziare un oggetto della classe DataRowTipizzato?” ebbene se esiste un oggetto simile la sua importanza sicuramente la avrà.

Mettiamo caso che in un nostro metodo dobbiamo fare delle verifiche sulle righe di un DataTableTipizzato, e l’operazione principale da eseguire è quella di modificare un campo Booleano secondo il fatto che sia cambiato o no il valore all’interno di un campo della riga presa in considerazione.

‘VB

FOR EACH riga as DataSetTipizzato.DataRowTipizzato in DataTableTipizzato.Rows

IF riga.Item(“nome_colonna”, DataRowVersion.Current) = riga.Item(“nome_colonna” , DataRowVersion.Original) THEN

riga.Item(“nome_booleano”) = True

ELSE

riga.Item(“nome_booleano”) = False

END IF

NEXT

// C#

foreach (DataSetTipizzato.DataRowTipizzato riga in DataTableTipizzato.Rows)

{

riga.Item[“nome_colonna” , DataRowVersion.Original ]= = riga.Item[ “nome_colonna”, DataRowVersion.Current]? riga.Item[“nome_booleano”] = True : riga.Item[“nome_booleano”] = False

}

Come si può ben vedere dal codice, è possibile verificare la versione dei valori contenuti nelle righe senza dover salvare in variabili d’appoggio i valori d’origine, dando così la possibilità di risparmiare sia sulla complessità di spazio della nostra applicazione sia sul numero di righe di codice scritto, e quindi sulla leggibilità del nostro codice.

Riporto di seguito le possibili versioni dei dati :

Original -> Nella riga sono presenti i relativi valori originali.

Current -> Nella riga sono presenti valori correnti.

Proposed-> Nella riga è presente un valore proposto.

Default -> Versione predefinita di DataRowState. Per un valore DataRowStateAdded, Modified o Deleted, la versione predefinita è Current. Per un valore DataRowStateDetached, la versione è Proposed.

Published 14 ott 2009 15:02 da Giorgio
Inserito sotto:
Powered by Community Server (Commercial Edition), by Telligent Systems