Udostępnij za pośrednictwem


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ż