Generar conjuntos de datos fuertemente tipados

A partir de un esquema XML que cumple con el estándar del lenguaje de definición de esquemas XML (XSD), es posible generar un objeto DataSet fuertemente tipado mediante la herramienta XSD.exe incluida en Kit de desarrollo de software de Windows (SDK).

(Para crear un xsd a partir de las tablas de base de datos, vea WriteXmlSchema o Trabajar con los conjuntos de datos en Visual Studio).

En el siguiente código se muestra la sintaxis para generar un DataSet con esta herramienta.

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

En esta sintaxis, la directiva /d indica a la herramienta que genere un DataSet y /l: le indica el lenguaje que debe utilizar (por ejemplo, C# o Visual Basic .NET). La directiva opcional /eld especifica que puede usar LINQ to DataSet para consultar en el dataset generado. Esta opción se usa cuando también se especifica la opción /d. Para más información, vea Consulta de objetos DataSet con tipo. La directiva /n: opcional indica a la herramienta que genere también un espacio de nombres para el DataSet denominado XSDSchema.Namespace. El resultado del comando es XSDSchemaFileName.cs, que se puede compilar y utilizar en una aplicación de ADO.NET. El código generado puede compilarse como una biblioteca o un módulo.

En el siguiente código se muestra la sintaxis para compilar el código generado como una biblioteca mediante el compilador de C# (csc.exe).

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

La directiva /t: indica a la herramienta que compile en una biblioteca mientras que las directivas /r: especifican bibliotecas dependientes necesarias para la compilación. El resultado del comando es XSDSchemaFileName.dll, que se puede pasar al compilador al compilar una aplicación de ADO.NET con la directiva /r:.

En el siguiente código se muestra la sintaxis para tener acceso al espacio de nombres pasado a XSD.exe en una aplicación de ADO.NET.

Imports XSDSchema.Namespace  
using XSDSchema.Namespace;  

En el siguiente ejemplo de código se utiliza un DataSet con información de tipos denominado CustomerDataSet para cargar una lista de clientes de la base de datos Northwind. Una vez cargados los datos mediante el método Fill, el ejemplo recorre en bucle cada cliente de la tabla Customers utilizando el objeto CustomersRow (DataRow) con información de tipos. Esto proporciona acceso directo a la columna CustomerID, en lugar de tener acceso a ella mediante 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);  

A continuación se muestra el esquema XML utilizado para el ejemplo:

<?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>  

Consulte también