ASP.NET: DataReader e DataSet

Corso ASP.NET: decima puntata

Esempio funzionante | Sorgente | Scarica il sorgente (zip)

DataReader e DataSet rispondono a due diverse esigenze.

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

Il DataSet consente invece di eseguire ogni operazione sui dati e di utilizzare efficamente le tecniche di DataBinding ai controlli. Il DataSet è un oggetto di tipo “disconnesso“.

DataReader

Vediamo un esempio di utilizzo.

Viene visualizzata una tabella contenente il titolo, il numero di pagine e la collana di una serie di libri contenuti in un database Access.

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

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

In testa al sorgente notiamo la dichiarazione di alcuni namespace: grazie a questi decidiamo quale tipo di DataAdapter utilizzare all’interno del programma. In questo caso stiamo usando i DataAdapter relativi ad una sorgente dati Old Db.

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

È stato realizzato un file esterno di tipo ascx che contiene una proprietà con il percorso del database. Torneremo in un’altra puntata ad occuparci dei file ascx, per il momento quello che è sufficiente sapere è che in questo esempio è usato alla stregua di un file di configurazione.

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

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

 38     Dim objCommand As New OleDbCommand(strSelect,objConnection)    

È adesso il momento di creare un oggetto di tipo Command a cui è passata la connessione e l’operazione da svolgere (ovvero, la selezione dei libri del 1997).

A questo punto viene eseguito il metodo ExecuteReader che restituisce un oggetto DataReader pronto per l’uso.

 41     objDataReader = objCommand.ExecuteReader()

Con il metodo Read sono estratti uno per volta tutti i record del DataReader e viene composta una stringa che rappresenta una riga di una tabella Html.

Da notare come sia stato creato un oggetto di tipo asp:literal: è un segnaposto per la stringa che rappresenta il contenuto della tabella. Con l’istruzione

 58   risultati.Text = strTabella

il tutto viene poi visualizzato all’interno della tabella Html.

DataSet

Vediamo lo stesso esempio applicato ad un oggetto di tipo DataSet. Come dicevamo, non è il caso di utilizzare un DataSet se i dati estratti sono read-only e forward-only. La prossima puntata vedremo un “vero” caso di applicazione di un oggetto DataSet.

 31   Dim objDataAdapter As New OleDbDataAdapter(strSelect, objConnection)

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

 33   objDataAdapter.Fill(objDataSet,"Libro")

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

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

È creato poi un oggetto di tipo DataView. Un DataView è una rappresentazione dei dati di un DataSet che consente di ordinarli e filtrarli secondo criteri impostati dall’utente. In questo caso, però, è utilizzato un oggetto DataView per un altro scopo: il Data Binding. Solo un oggetto DataView può essere “agganciato” ad un controllo per automatizzarne la visualizzazione.

 37   libri.DataSource = objDataView
 38   libri.DataBind()

Come si vede, il DataView è associato all’oggetto libri (un DataGrid) e viene poi richiamato il metodo DataBind per effettuare la visualizzazione dei dati, evitando al programmatore la scrittura di codice di gestione.

2 pensieri su “ASP.NET: DataReader e DataSet

  1. Vorrei creare un web service in asp net che consenta la lettura di dati da un database. Pensavo ad un metodo che restituisse un DataReader o un DataSet ma incontro problemi legati alla serializzazione (messaggio di errore per la serializzazione in xml).
    Potresti aiutarmi con qualche consiglio?
    Grazie.

  2. Buona spiegazione ma se a me servisse la restituzione di un solo record e un singolo valore di un campo da associare ad una label come faccio???

I commenti sono chiusi.