Génération de datasets fortement typés

À partir d’un schéma XML conforme à la norme XSD (XML Schema Definition), vous pouvez générer un DataSet fortement typé à l’aide de l’outil XSD.exe fourni avec le Kit de développement logiciel (SDK) Windows.

(Pour créer un XSD à partir de tables de base de données, consultez WriteXmlSchema ou Utilisation de datasets dans Visual Studio).

Le code suivant montre la syntaxe permettant de générer un DataSet à l’aide de cet outil.

xsd.exe /d /l:CS XSDSchemaFileName.xsd /eld /n:XSDSchema.Namespace  

Dans cette syntaxe, la directive /d donne à l’outil l’ordre de générer un DataSet et /l: indique le langage à utiliser (par exemple, C# ou Visual Basic .NET). La directive facultative /eld spécifie que vous pouvez utiliser LINQ to DataSet pour interroger sur le DataSet. Cette option est utilisée lorsque l’option /d est également spécifiée. Pour plus d’informations, consultez Interrogation de jeux de données typés. La directive facultative /n: indique à l’outil de générer également un espace de noms pour le DataSet nommé XSDSchema.Namespace. La commande donne en sortie un fichier XSDSchemaFileName.cs, qui peut être compilé et utilisé dans une application ADO.NET. Le code généré peut être compilé sous la forme d'une bibliothèque ou d'un module.

Le code suivant montre la syntaxe permettant de compiler le code généré sous la forme d'une bibliothèque à l'aide du compilateur C# (csc.exe).

csc.exe /t:library XSDSchemaFileName.cs /r:System.dll /r:System.Data.dll  

La directive /t: donne à l'outil l'ordre de compiler en bibliothèque et les directives /r: spécifient les bibliothèques dépendantes requises pour la compilation. La commande donne en sortie un fichier XSDSchemaFileName.dll, qui peut être passé au compilateur au moment de la compilation d'une application ADO.NET avec la directive /r:.

Le code suivant montre la syntaxe permettant d'accéder à l'espace de noms passé à XSD.exe dans une application ADO.NET.

Imports XSDSchema.Namespace  
using XSDSchema.Namespace;  

L’exemple de code suivant utilise un DataSettypé nommé CustomerDataSet pour charger une liste de clients à partir de la base de données Northwind. Une fois les données chargées à l’aide de la méthode Fill, l’exemple boucle sur chaque client de la table Customers à l’aide de l’objet typé CustomersRow (DataRow). La colonne CustomerID est ainsi accessible directement, plutôt que via le DataColumnCollection.

Dim customers As CustomerDataSet= New CustomerDataSet()  
Dim adapter As SqlDataAdapter New SqlDataAdapter( _  
  "SELECT * FROM dbo.Customers;", _  
  "Data Source=(local);Integrated " & _  
  "Security=SSPI;Initial Catalog=Northwind")  
  
adapter.Fill(customers, "Customers")  
  
Dim customerRow As CustomerDataSet.CustomersRow  
For Each customerRow In customers.Customers  
  Console.WriteLine(customerRow.CustomerID)  
Next  
CustomerDataSet customers = new CustomerDataSet();  
SqlDataAdapter adapter = new SqlDataAdapter(  
  "SELECT * FROM dbo.Customers;",  
  "Data Source=(local);Integrated " +  
  "Security=SSPI;Initial Catalog=Northwind");  
  
adapter.Fill(customers, "Customers");  
  
foreach(CustomerDataSet.CustomersRow customerRow in customers.Customers)  
  Console.WriteLine(customerRow.CustomerID);  

Vous trouverez ci-après le schéma XML utilisé pour l’exemple :

<?xml version="1.0" encoding="utf-8"?>  
<xs:schema id="CustomerDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
  <xs:element name="CustomerDataSet" msdata:IsDataSet="true">  
    <xs:complexType>  
      <xs:choice maxOccurs="unbounded">  
        <xs:element name="Customers">  
          <xs:complexType>  
            <xs:sequence>  
              <xs:element name="CustomerID" type="xs:string" minOccurs="0" />  
            </xs:sequence>  
          </xs:complexType>  
        </xs:element>  
      </xs:choice>  
    </xs:complexType>  
  </xs:element>  
</xs:schema>  

Voir aussi