Generování datových sad se silnými typy

Vzhledem k schématu XML, které vyhovuje standardu XSD (XML Schema Definition Language), můžete vygenerovat silné typy DataSet pomocí nástroje XSD.exe, který je součástí sady Windows Software Development Kit (SDK).

(Pokud chcete vytvořit xsd z databázových tabulek, podívejte WriteXmlSchema se nebo pracujete s datovými sadami v sadě Visual Studio).

Následující kód ukazuje syntaxi pro generování datové sady pomocí tohoto nástroje.

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

V této syntaxi direktiva /d nástroji říká, aby vygeneroval datovou sadu, a /l: řekne nástroji, jaký jazyk se má použít (například C# nebo Visual Basic .NET). Volitelná /eld direktiva určuje, že můžete použít LINQ to DataSet k dotazování na vygenerovanou datové sady. Tato možnost se používá při /d zadání této možnosti. Další informace naleznete v tématu Dotazování typových datových sad. Volitelná /n: direktiva říká nástroji, aby také vygeneroval obor názvů pro datovou sadu s názvem XSDSchema.Namespace. Výstupem příkazu je XSDSchemaFileName.cs, který lze zkompilovat a použít v ADO.NET aplikaci. Vygenerovaný kód lze zkompilovat jako knihovnu nebo modul.

Následující kód ukazuje syntaxi pro kompilaci vygenerovaného kódu jako knihovny pomocí kompilátoru jazyka C# (csc.exe).

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

Direktiva /t: říká nástroji, aby se zkompiloval do knihovny, a /r: direktivy určují závislé knihovny potřebné ke kompilaci. Výstup příkazu je XSDSchemaFileName.dll, který lze předat kompilátoru při kompilaci ADO.NET aplikace s direktivou /r: .

Následující kód ukazuje syntaxi pro přístup k oboru názvů předaným XSD.exe v aplikaci ADO.NET.

Imports XSDSchema.Namespace  
using XSDSchema.Namespace;  

Následující příklad kódu používá typ DataSet s názvem CustomerDataSet k načtení seznamu zákazníků z databáze Northwind . Jakmile se data načtou pomocí fillové metody, příklad projde každý zákazník v tabulce Customers pomocí objektu Typed CustomersRow (DataRow). To poskytuje přímý přístup ke sloupci CustomerID, na rozdíl od 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);  

Následuje schéma XML použité v příkladu:

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

Viz také