厳密に型指定された DataSet の生成 (ADO.NET)
更新 : November 2007
XML スキーマ定義言語 (XSD) 標準に準拠する XML スキーマがあれば、Windows Software Development Kit (SDK) に付属の XSD.exe ツールを使用して、厳密に型指定された DataSet を生成できます。
XSD.exe ツールを使用して DataSet を生成する構文を次のコードで示します。
xsd.exe /d /l:CS XSDSchemaFileName.xsd /eld /n:XSDSchema.Namespace
この構文では、/d ディレクティブが DataSet を生成することを知らせます。また、/l: は使用する言語 (C#、Visual Basic .NET など) をツールに知らせます。オプションの /eld ディレクティブを指定すると、生成された DataSet に対し、LINQ to DataSet を使用してクエリを実行できます。このオプションは、/d オプションと組み合わせて指定します。詳細については、「型指定された DataSet のクエリ」を参照してください。オプションの /n: ディレクティブは、XSDSchema.Namespace と呼ばれる DataSet の名前空間も生成することをツールに知らせます。コマンドの出力は XSDSchemaFileName.cs で、ADO.NET アプリケーションでコンパイルおよび使用できます。生成されたコードをライブラリまたはモジュールとしてコンパイルできます。
C# コンパイラ (csc.exe) を使用して、生成されたコードをライブラリとしてコンパイルする構文を次のコードで示します。
csc.exe /t:library XSDSchemaFileName.cs /r:System.dll /r:System.Data.dll
/t: ディレクティブはライブラリとしてコンパイルすることをツールに知らせ、/r: ディレクティブはコンパイルに必要な依存ライブラリを指定します。コマンドの出力は XSDSchemaFileName.dll で、/r: ディレクティブによる ADO.NET アプリケーションのコンパイル時にコンパイラに渡すことができます。
ADO.NET アプリケーションの XSD.exe に渡された名前空間にアクセスする構文を次のコードで示します。
Imports XSDSchema.Namespace
using XSDSchema.Namespace;
CustomerDataSet という名前の型指定された DataSet を使用して、Northwind データベースから顧客リストを読み込むコード サンプルを次に示します。Fill メソッドを使用してデータが読み込まれると、例では、型指定された CustomersRow (DataRow) オブジェクトを使用して、Customers テーブルの各顧客をループします。これにより、DataColumnCollection を経由せずに CustomerID 列に直接アクセスできます。
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);
例に使用された XML スキーマを次に示します。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="CustomerDataSet" 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>