Udostępnij przez


Generowanie silnie typiowanych zestawów danych

Biorąc pod uwagę schemat XML zgodny ze standardem XSD (XML Schema Definition Language), można wygenerować silnie typizowane DataSet przy użyciu narzędzia XSD.exe dostarczonego z zestawem Sdk (Software Development Kit).

(Aby utworzyć xsd z tabel bazy danych, zobacz WriteXmlSchema lub Praca z zestawami danych w programie Visual Studio).

Poniższy kod przedstawia składnię generowania DataSet przy użyciu tego narzędzia.

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

W tej składni /d dyrektywa informuje narzędzie, aby wygenerować zestaw DataSet, a /l: informuje narzędzie, jakiego języka należy użyć (na przykład C# lub Visual Basic .NET). Opcjonalna /eld dyrektywa określa, że do wykonywania zapytań względem wygenerowanego zestawu danych można użyć linQ to DataSet. Ta opcja jest używana, gdy jest również określona /d opcja. Aby uzyskać więcej informacji, zobacz Querying Typed DataSets (Zapytania dotyczące typów zestawów danych). Opcjonalna /n: dyrektywa nakazuje narzędziu również wygenerowanie przestrzeni nazw dla DataSet o nazwie XSDSchema.Namespace. Dane wyjściowe polecenia są XSDSchemaFileName.cs, które można skompilować i użyć w aplikacji ADO.NET. Wygenerowany kod można skompilować jako bibliotekę lub moduł.

Poniższy kod przedstawia składnię kompilowania wygenerowanego kodu jako biblioteki przy użyciu kompilatora języka C# (csc.exe).

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

Dyrektywa /t: nakazuje narzędziu skompilowanie do biblioteki, a /r: dyrektywy określają biblioteki zależne wymagane do skompilowania. Dane wyjściowe polecenia to XSDSchemaFileName.dll, które można przekazać do kompilatora podczas kompilowania aplikacji ADO.NET za pomocą /r: dyrektywy .

Poniższy kod przedstawia składnię uzyskiwania dostępu do przestrzeni nazw przekazanej do XSD.exe w aplikacji ADO.NET.

Imports XSDSchema.Namespace
using XSDSchema.Namespace;

W poniższym przykładzie kodu użyto typowanego DataSet o nazwie CustomerDataSet do załadowania listy klientów z bazy danych Northwind. Po załadowaniu Fill danych przy użyciu metody przykład przechodzi przez każdego klienta w Customers tabeli przy użyciu obiektu typed CustomersRow (DataRow). Zapewnia bezpośredni dostęp do kolumny CustomerID, a nie za pośrednictwem kolekcji 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);

Poniżej przedstawiono schemat XML używany w tym przykładzie:

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

Zobacz także