Freigeben über


Generieren von stark typisierten "DataSets"

Ein XML-Schema, das dem XSD-Standard (XML Schema Definition Language) entspricht, ermöglicht es Ihnen, mithilfe des im Windows Software Development Kit (SDK) enthaltenen XSD.exe-Tools ein stark typisiertes DataSet zu generieren.

(Informationen zum Erstellen eines XSD aus Datenbanktabellen finden Sie unter WriteXmlSchema oder Arbeiten mit Datasets in Visual Studio).

Der folgende Code zeigt die Syntax zum Generieren eines DataSet mithilfe dieses Tools.

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

In dieser Syntax weist die /d Direktive dem Tool an, ein DataSet zu generieren, und das Tool teilt dem /l: Tool mit, welche Sprache verwendet werden soll (z. B. C# oder Visual Basic .NET). Die optionale /eld Direktive gibt an, dass Sie LINQ to DataSet verwenden können, um eine Abfrage für das generierte DataSet auszuführen. Diese Option wird verwendet, wenn die /d Option ebenfalls angegeben wird. Weitere Informationen finden Sie unter "Querying Typed DataSets". Die optionale /n:-Direktive weist das Tool an, auch einen Namespace mit dem Namen XSDSchema.Namespace für den DataSet zu generieren. Die Ausgabe des Befehls ist XSDSchemaFileName.cs, die in einer ADO.NET-Anwendung kompiliert und verwendet werden kann. Der generierte Code kann als Bibliothek oder modul kompiliert werden.

Der folgende Code zeigt die Syntax zum Kompilieren des generierten Codes als Bibliothek mit dem C#-Compiler (csc.exe).

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

Die /t: Direktive weist das Tool an, zu einer Bibliothek zu kompilieren, und die /r: Direktiven geben abhängige Bibliotheken an, die zum Kompilieren erforderlich sind. Die Ausgabe des Befehls ist XSDSchemaFileName.dll, die beim Kompilieren einer ADO.NET Anwendung mit der /r: Direktive an den Compiler übergeben werden kann.

Der folgende Code zeigt die Syntax für den Zugriff auf den Namespace, der an XSD.exe in einer ADO.NET Anwendung übergeben wird.

Imports XSDSchema.Namespace
using XSDSchema.Namespace;

Im folgenden Codebeispiel wird ein typisiertes DataSet mit dem Namen CustomerDataSet verwendet, um eine Liste von Kunden aus der Northwind-Datenbank zu laden. Sobald die Daten mithilfe der Fill Methode geladen wurden, durchläuft das Beispiel jeden Kunden in der Customers Tabelle mithilfe des typierten CustomersRow (DataRow)-Objekts. Dies ermöglicht direkten Zugriff auf die CustomerID Spalte im Gegensatz zu 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);

Im Folgenden sehen Sie das XML-Schema, das für das Beispiel verwendet wird:

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

Siehe auch