Académique Documents
Professionnel Documents
Culture Documents
10 DataSet et XML
10
DataSet et XML
Ce chapitre prsente dautres mcanismes pour manipuler des donnes structures et hirarchiques. DataSet, par exemple, permet de rcuprer des donnes dune source de donnes et de les stocker en mmoire, prtes tre utilises sans avoir se reconnecter la base de donnes. XML est un chier qui stocke des donnes sous forme hirarchique, et celles-ci sont tlchargeables vers la page ASP.NET 2.0 laide des mthodes et proprits des contrles ASP.NET 2.0.
10.1 DataSet
DataSet consiste en une collection dobjets DataTable. Il permet, laide de la classe DataAdapter, de rcuprer des donnes dune source de donnes et de les stocker en mmoire. Dans les exemples du chapitre Les bases de donnes, vous avez travaill avec des donnes connectes au serveur, mais quand vous travaillez avec DataSet, il faut savoir que les donnes sont dconnectes du serveur. Lavantage du stockage de la base de donnes en mmoire permet lutilisateur de prendre son temps pour modier les donnes. Une fois les modications faites, il fait leur mise jour dans le serveur dun seul clic, dchargeant ainsi considrablement ce dernier. DataSet possde aussi des mthodes comme WriteXml et ReadXml pour lire et crire les donnes en tant que documents XML.
Exemple
Dans cet exemple et laide de Visual Web Developer, vous allez crer les objets DataSet et TableAdapter, puis une couche daccs aux donnes laide dObjectDataSource. Vous allez congurer ObjectDataSource avec DataSet pour afficher les donnes dans un contrle GridView. 1 Ouvrez Visual Web Developer et crez un nouveau site web, que vous nommez xmlProjet. 2 Slectionnez le rpertoire racine du projet xmlProjet, puis cliquez sur Nouveau chier dans le menu Fichier. La bote de dialogue Ajouter un nouvel lment souvre. 3 Dans la bote de dialogue Ajouter un nouvel lment, choisissez DataSet puis cliquez sur le bouton Ajouter. Visual Web Developer vous demande de crer le rpertoire App_Code sil nexiste pas ; dans ce cas, cliquez sur OK. 4 Visual Web Developer insre automatiquement TableAdapter et ouvre la bote de dialogue Assistant Conguration de TableAdapter pour ajouter ou choisir la connexion la base de donnes. Si vous cliquez sur le bouton Annuler, vous pouvez toujours glisser un autre TableAdapter de la Bote outils.
380 Le guide du codeur
DataSet
10
Suivez les instructions pour ajouter une connexion de donnes comme vous lavez dj fait dans les exemples prcdents. Cette fois, choisissez la base de donnes Northwind et pour le type de commande, cliquez sur le bouton radio Utiliser des instructions SQL puis cliquez sur le bouton Gnrateur de requtes.
5 Dans la bote de dialogue Ajouter une table, slectionnez Customers, puis cliquez respectivement sur les boutons Ajouter et Fermer.
10
DataSet et XML
6 Dans la bote de dialogue Gnrateur de requtes, cochez les cases CustomerID, ContactName, Address, City et Phone puis cliquez sur les boutons Excuter la requte et OK.
7 Dans la bote de dialogue Entrez une instruction SQL, cliquez sur le bouton Suivant.
DataSet
10
8 Dans la bote de dialogue Choisir les mthodes gnrer, cochez les trois cases, puis cliquez sur le bouton Suivant.
10 Crez un chier Web Form et donnez-lui le nom dataset.aspx. Ouvrez-le et passez en mode Design.
Le guide du codeur 383
10
DataSet et XML
11 Glissez un contrle GridView dans le document. Dans son panneau Tche GridView, choisissez Nouvelle source de donnes dans la liste droulante. 12 Dans la bote de dialogue Choisir un type de source de donnes, choisissez Objet et laissez le nom ObjetDataSource1, puis cliquez sur OK. 13 Dans la bote de dialogue Choisir un objet mtier, choisissez Dataset1TableAdapters.CustomersTableadapter dans la liste droulante Choisissez votre objet mtier, puis cliquez sur le bouton Suivant.
14 Dans la bote de dialogue Dnir les mthodes de donnes, laissez les slections par dfaut et cliquez sur le bouton Terminer.
DataSet
10
m Figure 10-9 : Les donnes de DataSet affiches laide de GridView dans la fentre du navigateur
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Page sans titre</title> </head> <body> <form id="form1" runat="server"> <div> </div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CustomerID" DataSourceID="ObjectDataSource1"> <Columns> <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> <asp:BoundField DataField="ContactName" HeaderText="ContactName"
Le guide du codeur 385
10
DataSet et XML
SortExpression="ContactName" /> <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" /> <asp:BoundField DataField="Address" HeaderText="Address" SortExpression="Address" /> <asp:BoundField DataField="Phone" HeaderText="Phone" SortExpression="Phone" /> <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" ReadOnly="True" SortExpression="CustomerID" /> </Columns> </asp:GridView> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="Delete" OldValuesParameterFormatString="original_{0}" SelectMethod="GetData" TypeName="DataSet1TableAdapters.CustomersTableAdapter" UpdateMethod="Update"> <DeleteParameters> <asp:Parameter Name="Original_CustomerID" Type="String" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="ContactName" Type="String" /> <asp:Parameter Name="City" Type="String" /> <asp:Parameter Name="Address" Type="String" /> <asp:Parameter Name="Phone" Type="String" /> <asp:Parameter Name="CustomerID" Type="String" /> <asp:Parameter Name="Original_CustomerID" Type="String" /> </UpdateParameters> </asp:ObjectDataSource> </form> </body> </html>
m Le code de chier dataset.aspx
10.2 XML
Dans les chapitres prcdents, vous avez utilis les sources de donnes tabulaires (bidirectionnelles) SqlDataSource et ObjectDataSource. Dans cette section, vous allez travailler avec la source de donnes hirarchiques XmlDataSource. La source de donnes AccessDataSource, qui ncessite le logiciel Microsoft Access, ne sera pas traite ici car nous travaillons dans ce livre avec SQL Server 2005 Express Edition comme un systme de gestions de base de donnes. Cette section commence par une introduction au langage XML qui prsente brivement le document XML et sa structure, puis les diffrentes
386 Le guide du codeur
XML
10
mthodes ou technologies qui affichent les donnes du document XML. Les autres rubriques couvrent les contrles ASP.NET 2.0 qui affichent les donnes du document XML sur le navigateur et les stockent dans le document XML. Ce livre, tant consacr Visual Web Developer et ASP.NET 2.0, ne dtaille pas XML. Pour plus dinformations sur ce langage, rfrez-vous aux nombreuses ressources disponibles dans le commerce (ouvrages, articles, etc.).
Le bloc prologue Les lments du bloc prologue sont facultatifs. Voici ce quil peut y avoir dans le prologue dun document XML : 1 Une dclaration de codage et le numro de version ;
<?xml version="1.0" encoding="UTF-8"?>
2 Des instructions de traitement qui se prsentent par une liaison un chier de feuille de style ;
<?xml-stylesheet type="text/xsl" href="fichier_css.xsl"?>
3 La dclaration DOCTYPE qui se prsente par une liaison un chier de dnition de type de document (DTD) ;
<!DOCTYPE catalog SYSTEM "fichier_dfinition.dtd">
10
DataSet et XML
Le bloc des lments Le bloc des lments consiste en des balises dlments, chaque lment devant avoir un nom, et un ou plusieurs attributs avec leurs valeurs. Voici un exemple de balisage des lments :
<personne> <homme> <nom>Maxime</nom> </homme> <femme> <nom>Mona</nom> </femme> </personne>
Le document prcdent peut tre crit aussi avec des attributs comme suit :
<personne> <homme nom="Maxime"></homme> <femme nom="Mona"></femme> </personne>
Dans le balisage prcdent, la balise <personne> reprsente la racine du document XML, sachant que dans un document XML, il ne doit y avoir quune seule racine. Les autres lments sont des lments enfants. Voici lexemple dun document XML qui commence par le prologue, puis llment racine <personnes>, llment enfant <personne> qui possde son tour les lment enfants <homme>, <femme> et ses attributs nom.
<?xml version="1.0" encoding="UTF-8"?> <personnes> <personne> <homme nom="Maxime"></homme> <femme nom="Mona"></femme> </personne> </personnes>
XML
10
une ou plusieurs mthodes et technologies et il est important de les analyser pour en comprendre les mcanismes avant de voir comment ASP.NET 2.0 traite le document XML.
Afficher les donnes du chier XML laide du chier des feuilles de style Il est possible de formater les donnes du chier XML par les feuilles de style en cascade. Le code suivant du chier XML personne.xml contient un lien au chier css appel fichier_css.css.
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/css" href="fichier_css.css"?> <personnes> <personne> <homme> <nom>Maxime</nom> </homme> <femme> <nom>Mona</nom> </femme> </personne> </personnes>
m Le chier XML personne.xml
Si vous double-cliquez sur le chier personne.xml pour louvrir, les noms Maxime et Mona vont safficher sur lcran du navigateur.
Afficher les donnes du chier XML laide de JavaScript et des objets DOM Dans le document HTML suivant, lactiveX Microsoft.XMLDOM permet de tlcharger le document personne02.xml laide de la mthode load et de crer un arbre dobjets DOM manipulables par JavaScript.
<html> <head> <style> <!-.nom_s { display: block;
10
DataSet et XML
color: brown; font-size: 12pt; } --> </style> </head> <body> <script language="javascript"> var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("personne02.xml") document.write(<Div class="nom_s">) document.write(xmlDoc.documentElement.selectNodes ("personne/homme").item(0).text) document.write(</Div><Div class="nom_s">) document.write(xmlDoc.documentElement.selectNodes ("personne/femme").item(0).text) document.write("</Div>") </script> </body> </html>
m Le code du chier HTML Javascript_dom.html
<?xml version="1.0" encoding="UTF-8"?> <personnes> <personne> <homme> <nom>Maxime</nom> </homme> <femme> <nom>Mona</nom> </femme> </personne> </personnes>
m Le code du chier personne02.xml
Afficher les donnes du chier XML laide de XSLT Le code du chier XML personne03.xml suivant contient un lien au chier XSLT fichier_xsl.xsl. Le chier XSLT formate le document XML laide de llment <xsl:template> qui utilise le langage XPath (XPath fonctionne comme SQL). Pour plus dinformations sur XSLT et XPath, consultez les documentations de Microsoft.
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="fichier_xsl.xsl"?> <personnes> <personne>
XML
10
<?xml version=1.0?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="homme"> <DIV STYLE="display: block; color: brown; font-size: 12pt;"> <xsl:value-of select="nom" /> </DIV> </xsl:template> <xsl:template match="femme"> <DIV STYLE="display: block; color: brown; font-size: 12pt;"> <xsl:value-of select="nom" /> </DIV> </xsl:template> </xsl:stylesheet>
m Le code du chier chier_xsl.xsl
10
DataSet et XML
langage de requte XPath permet de ltrer les donnes XML laide du contrle XmlDataSource. ASP.NET 2.0 possde aussi des classes disposition pour travailler avec le document XML comme XmlTextReader et XmlTextWriter qui offrent un accs rapide et non mis en cache pour la lecture et lcriture en tant que document XML. Les mthodes WriteXml et ReadXml de DataSet permettent galement de lire et crire les donnes en document XML.
XML
10
<div> <asp:Xml ID="Xml1" runat="server" DocumentSource="~/App_Data/personne02.xml" TransformSource="~/App_Data/fichier_xsl.xsl"> </asp:Xml></div> </form> </body> </html>
m Le code de chier xmlCtrl.aspx
Les chiers XML et XSL Pour formater les donnes dun chier XML laide dun chier XSLT, vous devez indiquer le nom du chier XSL dans le code du chier XML par le code suivant :
Exemple Dans cet exemple, vous allez utiliser la source de donnes XmlDataSource et le contrle de donnes GridView pour afficher les donnes du chier livres.xml sous forme tabulaire. Normalement, XmlDataSource rend le premier niveau de la hirarchie de donnes XML.
1 Ouvrez Visual Web Developer et le projet xmlProjet. 2 Dans lExplorateur de solutions, slectionnez le rpertoire App_Data, cliquez avec le bouton droit de la souris puis cliquez sur Ajouter un nouvel lment. La bote de dialogue Ajouter un nouvel lment souvre. 3 Dans la bote de dialogue Ajouter un nouvel lment, slectionnez Fichier XML et donnez-lui le nom livres.xml puis cliquez sur le bouton Ajouter. 4 Saisissez le code suivant dans le document du chier livres.xml.
<?xml version="1.0" encoding="utf-8" ?> <Livres> <Livre Titre="ASP.NET 2.0" ISBN="2100497782"> <Auteur IDn="Sweet"></Auteur> <Editeur nom="DDM"></Editeur>
Le guide du codeur 393
10
DataSet et XML
<Texte Langue="Franais" ></Texte> </Livre> <Livre Titre="VB.NET" ISBN="2100497782"> <Auteur IDn="Douran"></Auteur> <Editeur nom="Future"></Editeur> <Texte Langue="Franais" ></Texte> </Livre> <Livre Titre="C#" ISBN="2100497782"> <Auteur IDn="Nissan"></Auteur> <Editeur nom="Livrat"></Editeur> <Texte Langue="Anglais" ></Texte> </Livre> </Livres>
m Le code du chier livres.xml
5 Dans lExplorateur de solutions, slectionnez le rpertoire racine, cliquez avec le bouton droit de la souris puis cliquez sur Ajouter un nouvel lment. 6 Dans la bote de dialogue Ajouter un nouvel lment, choisissez Web Form puis saisissez xmlGridView.aspx comme nom du chier. Cliquez ensuite sur le bouton Ajouter. 7 Avec le document xmlGridView.aspx ouvert, passez en mode Design. 8 Glissez un contrle GridView vers le document, ouvrez son panneau Tche GridView puis choisissez Nouvelle source de donnes dans la liste droulante. 9 Dans la bote de dialogue Choisir un type de source de donnes, choisissez Fichier XML et laissez le nom XmlDataSource1 puis cliquez sur OK.
XML
10
10 Dans la bote de dialogue Congurer la source de donnes, cliquez sur le bouton Parcourir sur la mme ligne que le champ Fichier de donnes. Slectionnez le chier livres.xml puis cliquez sur OK.
m Figure 10-12 : Les donnes du chier livres.xml sont affiches dans le navigateur
10
DataSet et XML
<head runat="server"> <title>xmlGridView.aspx</title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="XmlDataSource1"> <Columns> <asp:BoundField DataField="Titre" HeaderText="Titre" SortExpression="Titre" /> <asp:BoundField DataField="ISBN" HeaderText="ISBN" SortExpression="ISBN" /> </Columns> </asp:GridView> <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_Data/livres.xml"> </asp:XmlDataSource> </div> </form> </body> </html>
m Le code du chier xmlGridView.aspx
Modier le chier XML laide du contrle XmlDataSource Normalement, le contrle XmlDataSource fonctionne seulement en lecture de donnes. Pourtant, vous pouvez lutiliser pour modier les donnes du chier XML. Pour cela, il faut utiliser la mthode GetXmlDocument qui construit lobjet XmlDocument avec ses objets enfants XmlNode en mmoire. Ces objets permettent de modier les donnes en mmoire. laide de la mthode save, ces donnes modies et non modies vont tre sauvegardes en remplaant les donnes du chier XML.
XML
10
2 partir de lExplorateur de solutions, pointez sur le chier Default.aspx, cliquez avec le bouton droit de la souris puis cliquez sur Copier. Notez que le chier Default.aspx a t cr dans la section DataSet. 3 Pointez sur le rpertoire racine, cliquez avec le bouton droit de la souris puis cliquez sur Coller. Renommez ensuite Copie de Default.aspx en dataSet_Xml.aspx. An de travailler sans CodeBehind, supprimez le chier dataSet_Xml.aspx.vb et les attributs CodeFile= dataSet_Xml.aspx.vb et Inherits="_Default" dans la directive de la page dataSet_Xml.aspx. 4 Ouvrez le chier dataSet_Xml.aspx puis passez en mode Design. 5 Slectionnez le contrle GridView, ouvrez son panneau Tches Gridview puis cochez la case Activer la pagination. Dans la fentre Proprits du contrle GridView, donnez la valeur 5 la proprit PageSize. 6 En bas du contrle GridView, glissez un contrle Button, saisissez Stocker dans le fichier XML dans le champ de texte de sa proprit Text. Double-cliquez sur le bouton pour passer en mode Source et gnrer la mthode dvnement Button1_Click. 7 Vous allez faire une nouvelle connexion la base de donnes Northwind et stocker les donnes dans un nouvel objet Dataset que vous allez crer par programme. Il est possible aussi dutiliser Dataset1 li au contrle GridView par la cration dune instance objet de DataSet1. Double-cliquez, pour cela, sur le bouton pour passer en mode Source et gnrer la mthode dvnement Button1_Click. Ensuite, saisissez-y le code suivant :
Dim cnexStrg As String = "database=Northwind;Data " _ & "Source=GIBRALTAR\SQLEXPRESS; Integrated Security=True" Using connexion As New Data.SqlClient.SqlConnection(cnexStrg) Dim commande As New Data.SqlClient.SqlCommand _ ("select ContactName, City, Address, Phone, " _ & "CustomerID from customers", connexion) connexion.Open() Dim dtSet As New Data.DataSet dtSet.DataSetName = "Clients" dtSet.Load(commande.ExecuteReader(), _ Data.LoadOption.OverwriteChanges, "Client") dtSet.WriteXml(Server.MapPath("~/App_Data/dataSetXml.xml")) End Using
8 Appuyez sur les touches [Ctrl]+[F5] pour tester la page. Une fois les donnes affiches dans le contrle GridView, cliquez sur le bouton Stocker dans le chier XML pour excuter la mthode Button1_Click qui va faire une connexion la base de donnes Northwind, rcuprer les donnes et les stocker dans le DataSet. Ensuite, la mthode WriteXml cre ou met jour le chier dataSetXml.xml. Notez que si vous ne voyez pas le chier XML dans le dossier App_Data, il vous faut le slectionner, puis cliquer avec le bouton droit
Le guide du codeur 397
10
DataSet et XML
Check-list
10
DeleteMethod="Delete" OldValuesParameterFormatString="original_{0}" SelectMethod="GetData" TypeName= "DataSet1TableAdapters.CustomersTableAdapter" > </asp:ObjectDataSource> <br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Stocker dans le fichier XML" /> </form> </body> </html>
m Le code du chier dataSetXml.xml
propos de linstruction Data.DataSet Pour viter daccder aux classes de System.Data par linstruction Data.Data-
Set, vous pouvez insrer la directive Import comme suit : <%@ Import Namespace="System.Data" %>
Une fois la directive ajoute dans le document, vous pouvez simplier linstruction Data.DataSet en saisissant DataSet seulement.
10.3 Check-list
Voici un rsum des principaux points abords dans ce chapitre :
j j j j
La cration des objets DataSet et TableAdapter; Une vue gnrale du langage XML; Laffichage des donnes du chier XML dans la page ASP.NET 2.0; Le stockage des donnes dans un chier XML.