Generowanie silnie typizowanych elementów DataSet

Biorąc pod uwagę schemat XML zgodny ze standardem języka definicji schematu XML (XSD), 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 zestawu danych 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 o wygenerowaniu zestawu danych, a /l: narzędzie 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 zestawu danych 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 są 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;  

Poniższy przykład kodu używa typowego zestawu danych o nazwie CustomerDataSet, aby załadować listę klientów z bazy danych Northwind. Po załadowaniu danych przy użyciu metody Fill przykład przechodzi przez każdego klienta w tabeli Customers przy użyciu wpisanego obiektu CustomersRow (DataRow). Zapewnia to 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 też