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>