Portail collaboratif de partage de la connaissance
Bienvenue sur A525G, un portail collaboratif que tout le monde peut faire évoluer.
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.
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 :
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.
Note : Seul une partie des méthodes du DataReader sont exposées ici
Auteur : Sylvain Bilodeau
Date de mise en ligne : 2003-06-19
Réagir à cet article
Aucun commentaire pour l'instant.