Accès aux données ASP.NET
Le .NET Framework propose une nouvelle technologie d'accès aux données nommée ADO.NET, une amélioration de ADO. Cependant, les classes qui constituent ADO.NET sont différentes des objets ADO avec lesquels vous êtes peut être déjà familier. Certains changements doivent être apportés aux applications ADO pour les convertir en ADO.NET. Il n'est pas nécessaire que ces changements soient appliqués immédiatement pour que les applications s'exécutent sous ASP.NET, dans la mesure où ADO fonctionne sous ASP.NET. Néanmoins, convertir des applications ADO en ADO.NET est bénéfique. Pour les applications déconnectées, ADO.NET offre des avantages en termes de performances sur les jeux d'enregistrements déconnectés. Alors que ADO nécessite que les composants transmis et reçus soient des objets COM, ADO.NET transmet les données au format XML standard de sorte que le marshaling COM ou les conversions de type de données ne sont pas requis.
Les données extraites à partir d'une base de données sont généralement utilisées de deux manières différentes. Les enregistrements peuvent être examinés et manipulés par du code ASP en préambule à d'autres actions, sans être affichés directement au client, ou les enregistrements peuvent être simplement affichés au client dans un tableau ou une grille. Les exemples dans cette rubrique montrent comment convertir un scénario ADO standard en ADO.NET. Le modèle ADO.NET ne se limite pas aux données fournies par ces courts exemples ; il ne s'agit que d'une brève vue d'ensemble sur la manière de réaliser le portage de scénarios ASP et ADO communs vers le .NET Framework. Pour une introduction plus détaillée à ADO.NET, consultez Vue d'ensemble de ADO.NET.
Utilisation d'une seule table
Le premier bloc de code dans l'exemple suivant est représentatif d'une application ASP qui utilise ADO pour lire et manipuler un jeu d'enregistrements retourné à partir d'une seule requête SQL. Il utilise un objet Recordset ADO pour lire les enregistrements de données retournés à partir de l'exemple de base de données Northwind fourni avec Microsoft Access. Ce code est contenu dans un fichier avec une extension de nom de fichier .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(Server.HtmlEncode(ADOrs("FirstName")) & " " _
& Server.HtmlEncode(ADOrs("LastName")) & "<br>")
ADOrs.MoveNext
Loop
Response.Write("<p>End of data.")
end if
ADOrs.close
set ADOrs = nothing
%>
</body>
</html>
L'exemple suivant illustre les changements minimums nécessaires à la conversion de l'exemple précédent en une application ASP.NET. La plupart des changements sont nécessaires afin de respecter la nouvelle syntaxe Visual Basic. Ce fichier peut être renommé à l'aide d'une extension de nom de fichier .aspx et fonctionne avec ASP.NET. Les lignes modifiées apparaissent en gras. Remarquez l'ajout de la directive <%@ Page > avec l'attribut aspcompat=true sur la première ligne.
<%@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(Server.HtmlEncode(rs("FirstName").Value) _
& " " & Server.HtmlEncode(rs("LastName").Value) & "<br>")
rs.MoveNext
Loop
Response.Write("<p>End of data")
end if
rs.close
rs = nothing ' Set statement removed.
%>
L'exemple suivant est une application ASP.NET qui utilise ADO.NET pour lire les enregistrements à partir de la même base de données Northwind du premier exemple. Ce code, qui génère une sortie équivalente à celle de l'exemple précédent, a été modifié pour se conformer aux conventions de blocs de code ASP.NET.
L'exemple crée un objet DataSet ADO.NET qui contient dans ce cas un tableau de données, utilisé de la même manière qu'un Recordset ADO. Remarquez qu'un DataSet peut se composer de collections contenant plusieurs DataTables, DataRelations et Contraintes qui constituent une base de données résidente en mémoire. De ce fait, un DataSet ADO.NET offre une plus grande souplesse d'utilisation qu'un Recordset ADO.
Afin d'utiliser ADO.NET, vous devez importer les espaces de noms System.Data et System.Data.OleDb. Si votre source de données est une base de données SQL Server, importez l'espace de noms System.Data.SqlClient au lieu de System.Data.OleDb. Pour plus d'informations sur l'utilisation des objets de connexion pour les fournisseurs de données ADO et SQL .NET, consultez Gestion des connexions.
<%@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(Server.HtmlEncode(MyTable.Rows(loop1).Item("FirstName")) _
& " " & Server.HtmlEncode(MyTable.Rows(loop1).Item("LastName")) & "<br>")
Next loop1
End If
Response.Write("<p>End of data.</p>")
End Sub
</Script>
</html>
Dans les cas où une requête de base de données (voire une requête Join sur plusieurs tables) retourne un seul jeu d'enregistrements, vous pouvez utiliser une seule DataTable (MyTable
dans l'exemple) de la même manière que vous utilisez un Recordset ADO.
Utilisation de tables de base de données multiples
Le DataSet ADO.NET peut contenir des tables multiples et un ensemble de relations qui décrit une copie locale d'une base de données relationnelle. Il est pratique d'envisager celle-ci comme une mini base de données dans la mémoire du serveur. Grâce aux objets relation, votre code peut naviguer via la collection de tables pour accéder à des enregistrements de données de manière complexe sans avoir à faire de requêtes supplémentaires vers le magasin de données principal. Pour plus d'informations sur les composants d'un DataSet, consultez DataSet ADO.NET.
Affichage de données dans un contrôle
Pour afficher des données de base de données sous forme de tableau dans un navigateur, les développeurs ASP ont du écrire du code pour parsemer les données de balises HTML afin de créer des tableaux HTML immédiatement. ASP.NET comprend les contrôles serveur DataGrid, DataList, et Repeater qui simplifient grandement l'affichage des données sous forme de tableau sur une page Web. Les groupes de données ADO.NET peuvent être facilement liés à ces contrôles. À l'aide d'un contrôle, le moteur ASP.NET transmet du code HTML 3.2 pur au navigateur qui génère pour l'utilisateur des dispositions à la mise en forme riche.
Pour obtenir des exemples spécifiques utilisant ces contrôles pour afficher des données de base de données, consultezLiaison de données SQL à un contrôle DataGrid, Liaison de données SQL à un contrôle DataList, et Liaison de données SQL à un contrôle Repeater.
Voir aussi
Accès aux données avec ADO.NET | Migration de pages ASP vers ASP.NET