ASP.NET: DataReader e DataSet – Codice sorgente dell’esempio

Sorgenti: DataReader.aspxDataSet.aspxConnessione.ascx

Scarica i sorgenti: aspnet10.zip

Articolo a cui si riferisce il codice: ASP.NET: DataReader e DataSet

DataReader.aspx

  1   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3 
  4 <%@ Page Language="VB" Debug="True" %>
  5 
  6 <%@ Import Namespace="System.Data" %>
  7 <%@ Import Namespace="System.Data.OleDb" %>
  8 
  9 <%@ Register TagPrefix="cnn" TagName="connection" Src="connessione.ascx" %>
 10 <%@ Register TagPrefix="ANet" TagName="Footer" Src="includes/footer.ascx"%>
 11 
 12 <!
 13 # nome: DataReader.aspx
 14 # scritto da: Antonio Volpon
 15 # data creazione: 14 Novembre 2001
 16 # ultima modifica: 14 Novembre 2001
 17 # copyright: Antonio Volpon
 18 >
 19 
 20 <script language="vb" runat="server">
 21 
 22 Sub Page_Load()
 23 
 24   Dim strSelect As String
 25   Dim objDataSet As New DataSet()
 26   Dim objDataReader As OleDbDataReader
 27   
 28   Dim strTabella As String
 29   
 30   strSelect = "SELECT Titolo,NumeroPagine,Collana FROM Libro WHERE EdizioneAnno = ‘1987’ ORDER BY Titolo"
 31 
 32    Try
 33 
 34     Dim objConnection As New OleDbConnection(ctlConnessione.Access)
 35     
 36     objConnection.Open()
 37 
 38     Dim objCommand As New OleDbCommand(strSelect,objConnection)    
 39 
 40     
 41     objDataReader = objCommand.ExecuteReader()
 42     
 43     While objDataReader.Read
 44       strTabella += "<tr><td>" & objDataReader("Titolo") & "</td><td>" & objDataReader("NumeroPagine") & "</td><td>" & objDataReader("Collana") & "</td></tr>"
 45     End While
 46     
 47     objDataReader.Close()
 48     
 49     objConnection.Close()
 50     
 51    Catch objError As Exception
 52 
 53    risposta.innerHTML = "Errore: " & objError.Message & " " & objError.Source
 54    Exit Sub
 55     
 56    End Try
 57   
 58   risultati.Text = strTabella
 59    
 60 
 61 End Sub
 62 
 63 </script>
 64 
 65 <cnn:connection id="ctlConnessione" runat="server"/>
 66 
 67 <html>
 68 
 69   <head>
 70     <link rel="stylesheet" href="css/aspnet.css" type="text/css">
 71     </link>
 72     <title>DataReader</title>
 73   </head>
 74   
 75   <body>
 76 
 77     <div class="titolo">
 78       DataReader
 79     </div>
 80     
 81     <hr noshade="noshade" size="1" width="100%" />  
 82     
 83     <table border="1" cellspacing="0" cellpadding="3" bordercolor="#C0C0C0">
 84       <tr><td class="txtb">Titolo</td><td class="txtb">Pagine</td><td class="txtb">Collana</td></tr>
 85       <asp:literal id="risultati" runat="server" />
 86     </table>
 87     
 88     <div class="txtb" id="risposta" runat="server"></div>
 89     
 90  <ANet:Footer id="Menu" runat="server" />
 91 
 92   </body>
 93   
 94 </html>

DataSet.aspx

  1   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3 
  4 <%@ Page Language="VB" Debug="True" %>
  5 
  6 <%@ Import Namespace="System.Data" %>
  7 <%@ Import Namespace="System.Data.OleDb" %>
  8 
  9 <%@ Register TagPrefix="cnn" TagName="connection" Src="connessione.ascx" %>
 10 <%@ Register TagPrefix="ANet" TagName="Footer" Src="includes/footer.ascx"%>
 11 
 12 <!
 13 # nome: DataSet.aspx
 14 # scritto da: Antonio Volpon
 15 # data creazione: 12 Novembre 2001
 16 # ultima modifica: 12 Novembre 2001
 17 # copyright: Antonio Volpon
 18 >
 19 
 20 <script language="vb" runat="server">
 21 
 22 Sub Page_Load()
 23 
 24   Dim strSelect As String
 25   Dim objDataSet As New DataSet()
 26 
 27   strSelect = "SELECT Titolo,NumeroPagine,Collana FROM Libro WHERE EdizioneAnno = ‘1997’ ORDER BY Titolo"
 28 
 29   Dim objConnection As New OleDbConnection(ctlConnessione.Access)
 30     
 31   Dim objDataAdapter As New OleDbDataAdapter(strSelect, objConnection)
 32   
 33   objDataAdapter.Fill(objDataSet,"Libro")
 34 
 35   Dim objDataView As New DataView(objDataSet.Tables("Libro"))
 36   
 37   libri.DataSource = objDataView
 38   libri.DataBind()
 39 
 40 End Sub
 41 
 42 </script>
 43 
 44 <cnn:connection id="ctlConnessione" runat="server"/>
 45 
 46 <html>
 47 
 48   <head>
 49     <link rel="stylesheet" href="css/aspnet.css" type="text/css">
 50     </link>
 51     <title>Data Set</title>
 52   </head>
 53   
 54   <body>
 55     <div class="titolo">
 56       Data Set
 57     </div>
 58     
 59     <hr noshade="true" size="1" width="100%">  
 60     
 61     <asp:datagrid id="libri" runat="server"/>
 62     
 63  <ANet:Footer id="Menu" runat="server" />
 64 
 65   </body>
 66   
 67 </html>

Connessione.ascx

  1 <%@ Control Language="VB" %>
  2 
  3 <script language="VB" runat="server">
  4 
  5 Public ReadOnly Property SQLServer() As String
  6  Get
  7  Return "Provider=SQLOLEDB.1;data source=nomedatasource;initial catalog=Biblioteca;uid=zzz;pwd=xxx;"
  8  End Get
  9 End Property
 10 
 11 Public ReadOnly Property Access() As String
 12  Get
 13  Return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= D:\percorso\biblioteca.mdb"
 14  End Get
 15 End Property
 16 
 17 </script>

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.

ASP.NET e ADO.NET – Progettare soluzioni

Il manuale di Dino Esposito fa molta chiarezza sulle reali possibilità offerte da ASP.NET e ADO.NET.

La prima impressione di chi affronta ASP.NET è quella di lavorare in un mondo idilliaco, dove la soluzione ad ogni problema è a pochi click di distanza.

Questo è vero fino a quando i problemi sono di facile soluzione. Ma detto tra noi: quanti facili problemi incontrate nella vostra vita di programmatori?

Dino è realista e come tale sa che il ciclo di vita di un progetto è irto di spine: codice legacy, richieste specifiche degli utenti, algoritmi di difficile implementazione.

Nel leggere il manuale vi accorgerete che (purtroppo o per fortuna) non avete finito di scrivere codice e che tutte le “belle” cose di ASP.NET e del .NET Framework hanno anche dei limiti, appena scavate un po’ più a fondo.

Il manuale si distingue proprio per questo: non è né un’introduzione ad ASP.NET e ADO.NET, né un manuale di riferimento contentente ogni dettaglio degli oggetti .NET.

È una guida all’uso di ASP.NET e ADO.NET nei casi reali, quelli cioè che saranno i vostri progetti.

Abbiamo parlato dei limiti con i quali ci si scontra. Dino non si limita ad elencarli: rimarrete attoniti nel scoprire le soluzioni che di volta in volta vi propone per superarli con eleganza ed efficacia.

Non sta a noi lodare il suo lavoro, ma a voi. Se volete un assaggio di quello che vi aspetta vi consigliamo la lettura di questo “illuminante” articolo [nuova finestra] che ha scritto qualche mese fa per Msdn.

Se volete apprezzare il testo, prima di leggerlo installate gli esempi ASP.NET Microsoft e fateci un giro o acquistate un buon manuale introduttivo, tra quelli presenti nella nostra recensione comparativa.

Le soluzioni che ci sono piaciute

Accesso ai dati

  • Creazione di soluzioni Master-Detail con i DataGrid
  • Paginazione personalizzata con i DataGrid per aumentare l’efficienza
  • Ordinare le colonne (nei due sensi) con i DataGrid
  • Editing avanzato di un DataGrid

Data reporting

  • Selezione multipla nelle DataGrid
  • Aggregati e righe riepilogative

Interoperabilità

  • Come usare ADO nel .NET Framework (e questo è “facile”)
  • Come salvare oggetti ADO (es. Recordset) da .NET (e questo non è più tanto facile. Ottimo l’approccio Xml)

Pro

  • Elencati i limiti di ASP.NET e ADO.NET senza polemica, ma cercando di trovarne sempre una soluzione efficace
  • Mai soluzioni che risolvono i problemi a metà
  • Il libro è una traduzione del testo inglese curata dallo stesso autore
  • Il prezzo è competitivo

Informazioni

ASP.NET e ADO.NET Progettare Soluzioni (titolo originale Building Web Solutions with ASP.NET and ADO.NET) ¤ di Dino Esposito ¤ 350 pagine ¤ prezzo 35.00 euro ¤ edito da Mondadori Informatica (editore originale Microsoft Press) ¤ pubblicato a Maggio 2002