Accesso ai dati ASP.NET
In .NET Framework è inclusa una nuova tecnologia di accesso ai dati denominata ADO.NET, un'evoluzione di ADO. Tuttavia, le classi che costituiscono ADO.NET sono diverse dagli oggetti ADO già noti. È necessario apportare alcune modifiche alle applicazioni ADO esistenti per convertirle in ADO.NET. Non occorre apportare tali modifiche immediatamente per consentire l'esecuzione delle applicazioni in ASP.NET, in quanto ADO funzionerà in ASP.NET. La conversione di applicazioni ADO in ADO.NET è tuttavia utile. Per le applicazioni disconnesse ADO.NET offre vantaggi in termini di prestazioni nei recordset ADO disconnessi. Mentre in ADO è necessario che i componenti di trasmissione e ricezione siano oggetti COM, in ADO.NET i dati vengono trasmessi in formato XML standard in modo che non sia necessario eseguire il marshalling COM e le conversioni di tipi di dati.
I dati recuperati da un database vengono in genere utilizzati in due modi. I record potrebbero essere esaminati e modificati dal codice ASP prima di altre operazioni, senza essere visualizzati direttamente sul client, oppure potrebbero essere semplicemente visualizzati sul client in una tabella o griglia. Negli esempi contenuti in questo argomento viene descritto come convertire un tipico scenario ADO in ADO.NET. Il modello ADO.NET offre molto più di quanto non mostrino questi brevi esempi, che rappresentano solo una rapida panoramica su come eseguire il porting di comuni scenari ASP e ADO in .NET Framework. Per un'introduzione più dettagliata ad ADO.NET, vedere Cenni preliminari su ADO.NET.
Operazioni con una tabella singola
Il primo blocco di codice riportato nell'esempio seguente è tipico di un'applicazione ASP in cui si utilizza ADO per leggere e modificare un insieme di record restituito da una singola query SQL. Viene utilizzato un oggetto Recordset ADO per leggere i record di dati restituiti dal database di esempio Northwind fornito con Microsoft Access. Questo codice è contenuto in un file con estensione asp.
<%@LANGUAGE=VBSCRIPT%>
<!
This ASP example uses ADO to read records from a database and print two
fields from all returned records to an ASP page. Connection to the Northwind database is through an ODBC system data source (DSN.
>
<html>
<body>
<%
dim ADOconn, ADOrs, sqlstr
sqlstr="SELECT * FROM Employees;"
set ADOconn = Server.CreateObject("ADODB.Connection")
ADOconn.Open "DSN = Test"
set ADOrs = ADOconn.execute(sqlstr)
if ADOrs.BOF and ADOrs.EOF then ' Query didn't return any records.
Response.Write("No Records.")
else
ADOrs.MoveFirst
Do While Not ADOrs.EOF
Response.Write(ADOrs("FirstName") & " " _
& ADOrs("LastName") & "<br>")
ADOrs.MoveNext
Loop
Response.Write("<p>End of data.")
end if
ADOrs.close
set ADOrs = nothing
%>
</body>
</html>
Nell'esempio riportato di seguito vengono illustrate le modifiche minime necessarie alla conversione dell'esempio precedente in un'applicazione ASP.NET. La maggior parte delle modifiche è necessaria per la compatibilità con la nuova sintassi di Visual Basic. È possibile ridenominare questo file con l'estensione ASPX per poterlo eseguire con ASP.NET. Le righe modificate sono visualizzate in grassetto. La direttiva <%@ Page > con l'attributo aspcompat=true è stata aggiunta nella prima riga.
<%@Page aspcompat=true Language = VB%>
<!
This example uses ADO to read records from a database and print two
fields from all records in the database to an ASP.NET page.
The database is located on the server and connection is through an ODBC system data source (DSN.
>
<html>
<body>
<%
dim objConn, rs, sqlstr
sqlstr="SELECT * FROM Employees;"
objConn = Server.CreateObject("ADODB.Connection") ' Set removed.objConn.Open("DSN=TEST") ' Parentheses added.rs = objConn.execute(sqlstr) ' Set statement removed.
Response.Write("<p>ADO Test</p>")
if rs.BOF and rs.EOF then ' Query didn't return any records.
Response.Write("No Records")
else
rs.MoveFirst
Do While Not rs.EOF
' Specify Value property.
Response.Write(rs("FirstName").Value _
& " " & rs("LastName").Value & "<br>")
rs.MoveNext
Loop
Response.Write("<p>End of data")
end if
rs.close
rs = nothing ' Set statement removed.
%>
Nell'esempio successivo viene presentata un'applicazione ASP.NET che utilizza ADO.NET per leggere i record dallo stesso database Northwind dell'esempio precedente. Per compatibilità con le convenzioni dei blocchi di codice ASP.NET, il codice, il cui output è equivalente all'esempio precedente, è stato modificato.
Nell'esempio viene creato un oggetto DataSet di ADO.NET contenente una tabella di dati utilizzata pressoché allo stesso modo di un recordset ADO. Un oggetto DataSet può essere costituito da insiemi di uno o più elementi DataTable, DataRelation e Constraint che formano un database residente in memoria ed è pertanto molto più flessibile di un oggetto Recordset ADO.
Per utilizzare ADO.NET, è necessario importare gli spazi dei nomi System.Data e System.Data.OleDb. Se l'origine dati è un database SQL Server, importare lo spazio dei nomi System.Data.SqlClient invece di System.Data.OleDb. Per ulteriori informazioni sull'utilizzo di oggetti connessione per provider dati ADO e SQL .NET, vedere Connessioni gestite.
<%@Import Namespace="System.Data"%>
<%@Import Namespace="System.Data.OleDb"%>
<!
This example uses ADO.NET to read records from a database and print two
fields from all returned records to an ASP.NET page. The database
is located on the local server.
>
<html>
<Script Language=VB Runat=Server>
Sub Page_Load(Sender As Object, e As EventArgs)
Dim MyConnection As OleDbConnection
Dim MyCommand As OleDbDataAdapter
dim MyDataset As DataSet
dim MyTable As DataTable
dim loop1, numrows As Integer
dim sqlstr As String
sqlstr = "SELECT * FROM Employees;"
' Create a connection to the data source.
MyConnection = New OleDbConnection("Provider=SQLOLEDB;" _
& "server=localhost;"Integrated Security=SSPI;" _
& "Initial Catalog=Northwind")
' Create a Command object with the SQL statement.
MyCommand = New OleDbDataAdapter(sqlstr, MyConnection)
' Fill a DataSet with data returned from the database.
MyDataset = New DataSet
MyCommand.Fill(MyDataset)
' Create a new DataTable object and assign to it
' the new table in the Tables collection.
MyTable = New DataTable
MyTable = MyDataset.Tables(0)
' Find how many rows are in the Rows collection
' of the new DataTable object.
numrows = MyTable.Rows.Count
If numrows = 0 then
Response.Write("<p>No records.</p>")
Else
Response.Write("<p>" & Cstr(numrows) & " records found.</p>")
For loop1 = 0 To numrows - 1
' Print the values of the two columns in the Columns
' collection for each row.
Response.Write(MyTable.Rows(loop1).Item("FirstName") _
& " " & MyTable.Rows(loop1).Item("LastName") & "<br>")
Next loop1
End If
Response.Write("<p>End of data.</p>")
End Sub
</Script>
</html>
Nei casi in cui da una query di database, anche da una query di join a tabelle multiple, viene restituito un singolo insieme di record, è possibile utilizzare un oggetto DataTable singolo (MyTable
nell'esempio) allo stesso modo di un recordset ADO.
Operazioni con tabelle di database multiple
L'oggetto DataSet ADO.NET può contenere tabelle multiple e un insieme di relazioni che descrivono una copia locale di database relazionale, ossia un mini-database nella memoria server. Mediante gli oggetti relazione, è possibile spostare il codice nell'insieme di tabelle per accedere ai record di dati in modi complessi senza eseguire ulteriori query sull'archivio di dati principale. Per ulteriori informazioni sui componenti di un oggetto DataSet, vedere DataSet ADO.NET.
Visualizzazione di dati in un controllo
Per visualizzare i dati di database in formato tabellare in un browser, è stato necessario scrivere il codice in modo da inserire tra i dati i tag HTML per generare tabelle HTML in tempo reale. In ASP.NET sono presenti i controlli server DataGrid, DataList e Repeater che rendono più semplice la visualizzazione di dati tabulari in una pagina Web. I dataset ADO.NET sono facilmente associabili a questi controlli. Il motore ASP.NET, operando con un controllo, consente di inviare al browser la versione HTML 3.2 pura, che permette di creare layout dalla formattazione complessa per l'utente.
Per esempi specifici in cui vengono utilizzati questi controlli per visualizzare i dati di database, vedere Associazione di dati SQL a un controllo DataGrid, Associazione di dati SQL a un controllo DataList e Associazione di dati SQL a un controllo Repeater.
Vedere anche
Accesso ai dati mediante ADO.NET | Migrazione di pagine ASP in ASP.NET