Antonio Feliziani
a- a+

DataReader e DataSet

DataReader eDataSet rispondono a due diverseesigenze.

Il DataReader ha ottimeprestazioni e viene impirgato quando l’esigenzaè di connettersi ai dati in sola lettura e inmodalità forward-only

Il DataSet consenteinvece di eseguire ogni operazione sui dati e di utilizzareefficamente le tecniche diDataBinding ai controlli. IlDataSet è un oggetto di tipo“disconnesso“.

 

DataReader

Vediamo un esempio di utilizzo.

 

Viene visualizzata una tabella contenente il titolo, ilnumero di pagine e la collana di una serie di libri contenutiin un database Access.

L’interrogazione eseguita sul database è decisamente banale: sonoestratti i libri la cui edizione risale al 1997 e i dati sonoordinati per titolo del libro.

    <%@ Import Namespace="System.Data" %>   <%@ Import Namespace="System.Data.OleDb" %>


In testa al sorgente notiamo la dichiarazione di alcuninamespace: grazie a questidecidiamo quale tipo di DataAdapter utilizzare all’interno delprogramma. In questo caso stiamo usando i DataAdapter relativi ad una sorgentedati Old Db.

    <%@ Register TagPrefix="cnn" TagName="connection" Src="connessione.ascx" %>


È stato realizzato un file esterno di tipo ascx che contiene unaproprietà con il percorso deldatabase. Torneremo in un’altra puntata adoccuparci dei file ascx,per il momento quello che è sufficiente sapereè che in questo esempio è usato alla stregua diun file di configurazione.

    Dim objConnection As New OleDbConnection(ctlConnessione.Access)objConnection.Open()


Viene quindi dichiarata una connessione ADO.NET a cuiè passata la stringa dichiarata nel file ascx.

    Dim objCommand As New OleDbCommand(strSelect,objConnection)   


È adesso il momento di creare un oggetto di tipoCommand a cui è passatala connessione e l’operazione da svolgere (ovvero, laselezione dei libri del 1997).

A questo punto viene eseguito il metodo ExecuteReader che restituisce un oggettoDataReader pronto perl’uso.

    objDataReader = objCommand.ExecuteReader()


Con il metodo Read sonoestratti uno per volta tutti i record delDataReader e viene composta una stringa cherappresenta una riga di una tabella HTML.

Da notare come sia stato creato un oggetto di tipoasp:literal: è un segnaposto per la stringa cherappresenta il contenuto della tabella. Conl’istruzione

    risultati.Text = strTabella

il tutto viene poi visualizzato all’interno dellatabella HTML.



 

DataSet

Vediamo lo stesso esempio applicato ad un oggetto ditipoDataSet. Comedicevamo, non è il caso di utilizzare un DataSet se i dati estratti sonoread-only eforward-only. La prossima puntatavedremo un “vero” caso di applicazione di unoggetto DataSet.

    Dim objDataAdapter As New OleDbDataAdapter(strSelect, objConnection)


Dopo la connessione, si dichiara un oggetto di tipoDataAdapter al quale èpassata l’istruzione di selezione da eseguire.

    objDataAdapter.Fill(objDataSet,"Libro")


A questo punto, con il metodo Fill, viene “riempito” il DataSet (che, ricordiamo, èun oggetto disconnesso) con i dati restituiti dallaselezione.

    Dim objDataView As New DataView(objDataSet.Tables("Libro"))


È creato poi un oggetto di tipo DataView. Un DataView è una rappresentazione dei datidi un DataSet checonsente di ordinarli e filtrarli secondo criteri impostatidall’utente. In questo caso, però, èutilizzato un oggetto DataView per un altro scopo: il Data Binding. Solo un oggettoDataView può essere“agganciato” ad un controllo per automatizzarnela visualizzazione.

    libri.DataSource = objDataView    libri.DataBind()


Come si vede, il DataView è associato all’oggettolibri (un DataGrid) eviene poi richiamato il metodo DataBind per effettuare la visualizzazione deidati, evitando al programmatore la scrittura di codice digestione.