Generazione di dataset fortemente tipizzati

Dato un XML Schema conforme allo standard XSD (XML Schema Definition Language), è possibile generare un DataSet fortemente tipizzato usando lo strumento XSD.exe fornito con Windows Software Development Kit (SDK).

Per creare un file XSD dalle tabelle di database, vedere WriteXmlSchema o Utilizzo dei dataset in Visual Studio.

Nell'esempio seguente viene mostrata la sintassi per la generazione di un DataSet con questo strumento.

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

In questa sintassi la direttiva /d consente di richiedere allo strumento la generazione di un DataSet e /l: consente di fornire allo strumento informazioni relative al linguaggio da usare (ad esempio C# o Visual Basic .NET). La direttiva /eld facoltativa specifica che è possibile usare LINQ to DataSet per eseguire query sul DataSet generato. Questa opzione viene usata quando si specifica anche l'opzione /d. Per altre informazioni, vedere Esecuzione di query su dataset tipizzati. La direttiva facoltativa /n: consente di richiedere allo strumento anche la generazione di uno spazio dei nomi per il DataSet denominato XSDSchema.Namespace. L'output del comando è costituito dal file XSDSchemaFileName.dll, che può essere compilato e usato in un'applicazione ADO.NET. È possibile compilare il codice generato come libreria o modulo.

Nel codice seguente viene mostrata la sintassi per la compilazione del codice generato come libreria usando il compilatore C# (csc.exe).

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

La direttiva /t: consente di richiedere allo strumento la compilazione in una libreria e la direttiva /r: consente di specificare le librerie dipendenti necessarie per la compilazione. L'output del comando è costituito dal file XSDSchemaFileName.dll, che può essere passato al compilatore quando si compila un'applicazione ADO.NET con la direttiva /r:.

Nel codice seguente viene mostrata la sintassi usata per l'accesso allo spazio dei nomi passato a XSD.exe in un'applicazione ADO.NET.

Imports XSDSchema.Namespace  
using XSDSchema.Namespace;  

Nel seguente esempio di codice un DataSet tipizzato denominato CustomerDataSet viene usato per caricare un elenco di clienti dal database Northwind. Una volta caricati i dati usando il metodo Fill, l'esempio scorre in ciclo ogni cliente nella tabella Customers tramite l'oggetto tipizzato CustomersRow (DataRow). Questa operazione consente di accedere direttamente alla colonna CustomerID, anziché accedervi tramite 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);  

Di seguito viene riportato l'XML Schema usato per l'esempio:

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

Vedi anche