厳密に型指定された DataSet の生成

XML スキーマ定義言語 (XSD) 標準に準拠する XML スキーマがあれば、Windows ソフトウェア開発キット (SDK) に付属する XSD.exe ツールを使用して、厳密に型指定された DataSet を生成できます。

(データベース テーブルから xsd を作成するには、WriteXmlSchema に関するトピック、または「Visual Studio でのデータセットの操作」を参照してください)。

次のコードでは、このツールを使用して 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="" 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>  

関連項目