Generazione di DataSet fortemente tipizzati (ADO.NET)
Dato un XML Schema conforme allo standard XSD (XML Schema Definition Language), è possibile generare un DataSet fortemente tipizzato utilizzando lo strumento XSD.exe fornito con Windows Software Development Kit (SDK).
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 utilizzare (ad esempio C# o Visual Basic .NET). La direttiva /eld facoltativa specifica che è possibile utilizzare LINQ to DataSet per eseguire query sul DataSet generato. Questa opzione viene utilizzata quando si specifica anche l'opzione /d. Per ulteriori 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 utilizzato 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 utilizzando 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 utilizzata 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 utilizzato per caricare un elenco di clienti dal database Northwind. Una volta caricati i dati utilizzando 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 utilizzato per l'esempio.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="CustomerDataSet" 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>