Partager via


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