Dernière mise à jour :2008-08-29

informatique

ADO.Net est la nouvelle technologie d'accès aux bases de données offerte par le .Net Framework. Cette technologie contient un certain nombre d'objets permettant d'effectuer divers types d'opérations sur les données.

Parmis cette gamme d'objets, on retrouve notamment le DataReader dont il sera question dans cet article.

Qu'est-ce qu'un DataReader?

Un DataReader est une collection d'enregistrements provenant d'une source de données. Cette collection détient comme particularité d'être de type «forward only», c'est-à-dire qu'on ne peut naviguer dans le jeu d'enregistrements que du début vers la fin. Il est impossible en cours de chemin de revenir sur un enregistrement précédent.

Autre chose intéressante concernant le DataReader c'est qu'il n'offre aucun constructeur public. Il doit être créé avec la méthode ExecuteReader d'un autre objet de ADO.Net nommé Command.

Pour continuer parmis la liste de ses particularités, le DataReader doit toujours être attaché à une connexion active. Il ne peut donc, comme d'autres objets, se déconnecter, effectuer un traitement sur d'autres données et se reconnecter ensuite pour procéder à une mise à jour.

En fait, son rôle est très simple. C'est un objet légé conçu uniquement pour l'affichage de données. Il est donc très performant dans sa spécialité.

Si nous comparons avec ADO (l'ancienne version de ADO.Net), nous pouvons effectuer un rapprochement entre le DataReader et un objet Recordset auquel on aurait attribué un curseur de type Read-only / forward-only.

Notez que dans le Framework, il existe plusieurs type de DataReader :

  • OleDbDataReader : Utilisé pour les connexions à diverses sources de données.
  • SqlDataReader : Utilisé pour les connexions natives sur une base de données SQL Server.
  • OracleDataReader : Utilisé pour les connexions natives sur une base de données Oracle.

Lorsque vous désirez créer un DataReader, commencez par déclarer votre objet :

En c# : OleDbDataReader objDR;
En VB.Net : Dim objDR As OleDbDataReader

Ensuite, vous devez initialiser l'objet en utilisant la méthode ExecuteReader de l'objet Command.

Le listing ci-dessous (en c#) illustre la création d'un DataReader, qui, dans cet exemple, sera utilisé pour inter-agir avec une base de données Oracle.

Listing 1.0 Exemple de création d'un DataReader
1. OracleConnection OraCon = new OracleConnection();
2. OraCon.ConnectionString = "data source=mondatasource;userid=monuser;password=monpassword;";
3. OracleCommand OraCom = new OracleCommand();
4. OracleDataReader OraDR;
5. OraCon.Open();
6. OraCom.Connection = OraCon;
7. OraCom.CommandText = "SELECT * FROM table1";
8. OraDR = OraCom.ExecuteReader();

Dans l'exemple ci-dessus, le DataReader est initialisé à la dernière ligne du listing et il contient le résultat de la requête SQL que vous pouvez lire sur la ligne précédente, c-à-d, tout le contenu de la table nommée «table1».

Nous allons maintenant voir un exemple plus concret utilisant un DataReader.

Prenons par exemple la table fictive suivante :

Table Automobiles

Marques

Modeles

Honda

Civic

Honda

Accord

Toyota

Tercel

Toyota

Celica

Toyota

Corolla

Chevrolet

Cavalier

Pour faire afficher tous les modèles de Toyota disponibles dans la table dans une page ASP.NET, le code ressemblerait à ceci :

Listing 2.0 Exemple d'utilisation d'un DataReader
1. <%@ Page Language="C#" %>
2. <%@ import Namespace="System.Data" %>
3. <%@ import Namespace="System.Data.OleDb" %>
4. <script runat="server">
5. void Page_Load(Object Src, EventArgs E)
6. {
7.  OleDbConnection myCon = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\maBD.mdb");
8.  myCon.Open();
9.  OleDbCommand myCom = new OleDbCommand();
10.  OleDbDataReader myDR;
11.  myCom.Connection = myCon;
12.  myCom.CommandText = "SELECT Modeles FROM Automobiles WHERE Marques = 'Toyota'";
13.  myDR = myCom.ExecuteReader();
14.  if (myDR.HasRows)
15.  {
16.    while (myDR.Read())
17.    {
18.     TableRow myRow = new TableRow();
19.     TableCell myCell = new TableCell();
20.     myCell.Text = myDR["Modeles"].ToString();
21.     myRow.Cells.Add(myCell);
22.     tbl1.Rows.Add(myRow);
23.    }
24.  }
25.  else
26.    Response.Write("Aucun modèle Toyota disponible.");
27.  myDR.Close();
28.  myCon.Close();
29.  myCom.Dispose();
30.  myCon.Dispose();
31. }
32. </script>
33. <html>
34. <head>
35. </head>
36. <body>
37. <asp:Table id="tbl1" runat="server" borderwidth="1" />
38. </body>
39. </html>

Dans ce listing, on peut remarquer en ligne 14, l'utilisation de la propriété HasRows. Celle-ci est utilisée pour vérifier si le jeu d'enregistrement retourné par la requête SQL (ligne 12) contient au moins une ligne. Dans le cas contraire, le message «Aucun modèle Toyota disponible» s'affichera à l'écran.

L'affichage des données dans un tableau HTML est réalisé entre les lignes 16 et 23. Le traitement est effectué dans une boucle «while» jusqu'à ce que la méthode «Read()» retourne une valeur négative.

Note : Si vous avez déjà programmé en ASP avec un objet Recordset, vous remarquerez dans le listing, l'absence de l'appel d'une méthode du genre «MoveNext». En effet, la méthode « Read() » se charge elle-même de déplacer le curseur d'un enregistrement vers un autre.

En terminant, voici une liste d'autres propriétés et méthodes du DataReader.

Propriétés du DataReader

  • FieldCount
    • Trouve le nombre de colonnes dans l'enregistrement
  • IsClosed
    • Indique si le DataReader est fermé ou non
  • Item
    • Retrouve la valeur de la colonne dans son format natif
  • RecordsAffected
    • Trouve le nombre d'enregistrement affecté par une requête de type INSERT, UPDATE ou DELETE
  • HasRows
    • Retourne true si le DataReader contient au moins un enregistrement

Méthodes du DataReader

Note : Seul une partie des méthodes du DataReader sont exposées ici

  • Close
    • Ferme le DataReader. Note : Vous devez fermer le DataReader si vous prévoyez utilisé à d'autres fins, la connexion auquel il est associé.
  • Read
    • Avancer le DataReader vers l'enregistrement suivant
  • GetString
    • Retrouve la valeur de la colonne comme une chaîne de caractères
  • GetValue
    • Retrouve la valeur de la colonne à son format natif

Auteur : Sylvain Bilodeau

Date de mise en ligne : 2003-06-19

Aucun commentaire pour l'instant.