3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Le differenze nell'accesso ai dati
L'area dove si trova maggiore difficoltà è in tutta franchezza quella dell'accesso ai dati. Se il modello event driven tutto sommato è facile da abbracciare, le differenza tra ADO ed ADO.NET, ma soprattutto la presenza del DataBinding, possono turbare i sonni di molti sviluppatori ASP.
Il concetto che sta alla base di ASP.NET è quello di avere un certo tipo di controls, che sono comunemente detti data controls, che consentono di diminuire drasticamente il codice necessario ad estrarre dati da un database e questo è quanto più vero se abbinato ad ASP.NET 2.0, dove l'approccio dichiarativo (composto cioè di markup e non di codice) prende davvero il sopravvento.
Non è questa la sede giusta per disquisire sul fatto che in un mondo orientato agli oggetti non andrebbe mai annegata la parte di accesso ai dati nella pagina, ma è ovvio che con ASP la cosa rappresenterebbe non poche problematiche: le classi si possono creare in maniera decente solo utilizzando COM, il che vuol dire rendere il deployment quasi simile ad un incubo.
Dunque, fermo restando che la cosa migliore è suddividere in strati la propria applicazione, cerchiamo di capire, con esempi, come portare la logica di accesso ai dati da una pagina ASP ad una ASP.NET. Per capire al meglio quanto sia differente ADO.NET (e soprattutto, in cosa consista il concetto di managed provider, essenziale per comprendere il codice) vi invito alla lettura di questo articolo.
Con ASP l'oggetto che si utilizza è il recordset, che di default è un cursore read-only e forward-only verso i dati, consente cioè di leggerli in una modalità che consente di scorrere solo in avanti i risultati.
Questo approccio è comunque disponibile con ADO.NET e più precisamente attraverso l'utilizzo dell'oggetto DataReader, anche se di fatto viene usato solo quando si creano delle classi di business, perché nelle pagine vere e proprio c'è la possibilità di utilizzare i nuovi DataSource controls, che si occupano di nascondere la logica di connessione ed estrazione dati, in maniera trasparente.
Vediamo quindi un esempio:
Classic ASP
<%
strConn = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " & Server.MapPath("test.mdb")
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open StrConn
SQL = "SELECT * FROM Tabella"
Set rs = Server.CreateObject("ADODB.Recordset")
Rs.Open SQL, Conn
Do Until rs.Eof = True
' Mostra riga corrente
Response.write "<li>" & rs("nomecampo") & "</li>"
' Vai alla prossima riga
rs.movenext
Loop
' Libero risorse
rs.Close
set rs = Nothing
conn.Close
Set conn = Nothing
%>ASP.NET
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.SqlClient" %>
<SCRIPT language="VB" runat="server">
Sub Page_Load()
' query Sql
Dim query As String = "SELECT * FROM tabella"
' connessione
Dim conn As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
conn.Open()
' oggetto command
Dim command As SqlCommand = New SqlCommand(query, conn)
' esecuzione della query e salvataggio nell'oggetto datareader
Dim reader As SqlDataReader = command.ExecuteReader()
' BataBinding
MyRepeater.DataSource = reader
MyRepeater.DataBind()
' libero le risorse
reader.Close()
conn.Close()
End Sub
</SCRIPT><ASP:Repeater id="MyRepeater" runat="server">
<ItemTemplate>
<li><%# Eval("campo") %></li>
</ItemTemplate>
</ASP:Repeater>La verà differenza sta ancora una volta nell'uso dei controls, che ci consentono di dire addio a cicli per estrarre i dati (con l'eventuale possibilità di dimenticarci di chiudere correttamente il loop), in favore di un approccio più pulito. In particolare, la presenza del controllo repeater ci consente di fare la stessa cosa che avremmo fatto con Classic ASP: ripetere i dati finchè ce ne sono.
Quella sintassi particolare, che racchiude un'istruzione all'interno di <%# %>, viene detta di binding, perché viene valutata quando viene invocato il metodo DataBind() del controllo che la contiene.
Un problema che trova in genere chi viene da ASP è come manipolare un dato per trasformarlo prima di visualizzarlo. Non c'è niente di più semplice:
<li><%# Trasforma(Eval("campo")) %></li>dove Trasforma() è ovviamente una normalissima funzione che restituisce una stringa.
Con ASP.NET 2.0 si può anche fare a meno di utilizzare questa forma, optando per un semplice controllo SqlDataSource, che incapsula tutta la logica:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"
DataKeyNames="au_id" DataSourceID="SqlDataSource1" >
<Columns>
<asp:BoundField DataField="colonna" HeaderText="colonna" SortExpression="colonna" />
...
<asp:BoundField DataField="colonna" HeaderText="colonna" SortExpression="colonna" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:conn %>"
ProviderName="<%$ ConnectionStrings:pubsConnectionString1.ProviderName %>"
SelectCommand="SELECT * FROM Tabella">
</asp:SqlDataSource>Come già detto, questo approccio però non è in genere consigliato, perché si rischia di tenere troppo accoppiata la logica di accesso ai dati alla pagina e pertanto va favorito l'utilizzo di un architettura a 3 livelli, dove la logica di accesso ai dati risiede in classi ad hoc. Tuttavia all'inizio può rappresentare un giusto compromesso ed è possibile trovare un grande aiuto nel designer visuale, che consente di definire le opzioni di interrogazione del database e, grazie all'uso del control GridView, è anche in grado di supportare in modo automatico le funzionalità di paginazione, ordinamento, filtro e modifica dei dati.
E se vi chiedete con quali database funziona, la risposta è praticamente con tutti. Anche con MySQL, grazie a questo provider scritto dal nostro Marco Leoncini.
3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Contenuti dell'articolo
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Utilità
Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
