次の方法で共有


DataSet への既存の制約の追加

FillDataAdapterメソッドは、データ ソースのテーブル列と行のみをDataSetに格納します。制約はデータ ソースによって一般的に設定されますが、Fill メソッドでは既定でこのスキーマ情報はDataSetに追加されません。 データ ソースから既存の主キー制約情報をDataSetに設定するには、FillSchema メソッドを呼び出すか、MissingSchemaAction を呼び出す前にDataAdapterAddWithKey プロパティをに設定します。 これにより、 DataSet の主キー制約にデータ ソースの主キー制約が反映されるようになります。 外部キー制約情報はインクルードされないため、「DataTable の制約」で示されているように明示的に作成する必要があります。

データを入力する前にスキーマ情報をDataSetに追加すると、主キー制約が DataTable 内の オブジェクトに確実に含められます。 その結果、 DataSet を埋める追加の呼び出しが行われると、主キー列の情報を使用して、データ ソースの新しい行と各 DataTable の現在の行が照合され、テーブル内の現在のデータがデータ ソースのデータで上書きされます。 スキーマ情報がないと、DataSet にデータ ソースからの新しい行が付け加えられ、重複行が発生します。

データ ソース内の列が自動インクリメント、FillSchema メソッド、または FillMissingSchemaActionを持つ メソッドとして識別された場合は、DataColumn プロパティが AutoIncrement に設定されたtrueが作成されます。 ただし、 AutoIncrementStepAutoIncrementSeed の値を自分で設定する必要があります。 自動インクリメント列について詳しくは、「AutoIncrement 列の作成」をご覧ください。

FillSchemaを使用するか、MissingSchemaActionAddWithKeyに設定するには、データ ソースで追加の処理を行って主キー列の情報を決定する必要があります。 この追加の処理によりパフォーマンスが低下する場合があります。 デザイン時に主キー情報がわかっている場合は、最適のパフォーマンスを得るために主キー列 (複数の場合もある) を明示的に指定することをお勧めします。 テーブルに関する主キー情報を明示的に設定する方法については、「主キーの定義」をご覧ください。

次のコード例は、DataSet を使用してスキーマ情報をに追加する方法を示しています。

Dim custDataSet As New DataSet()

custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers")
custAdapter.Fill(custDataSet, "Customers")
var custDataSet = new DataSet();

custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers");
custAdapter.Fill(custDataSet, "Customers");

次のコード例は、DataSet メソッドの MissingSchemaAction.AddWithKey プロパティを使用して、スキーマ情報をFillに追加する方法を示しています。

Dim custDataSet As New DataSet()

custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
custAdapter.Fill(custDataSet, "Customers")
var custDataSet = new DataSet();

custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
custAdapter.Fill(custDataSet, "Customers");

複数の結果セットの処理

DataAdapterが SelectCommand から返された複数の結果セットを検出すると、DataSet に複数のテーブルが作成されます。 テーブルには、"Table0" ではなく Table から始まる、Table の 0 から始まる増分既定の名前が付けられます。 テーブル名が FillSchema メソッドに引数として渡された場合、テーブルには、"TableName0" ではなく TableName で始まる、TableName の 0 から始まる増分名が与えられる。

複数の結果セットを返すコマンドに対してFillSchema オブジェクトのOleDbDataAdapter メソッドが呼び出されると、最初の結果セットのスキーマ情報のみが返されます。 OleDbDataAdapter を使用して複数の結果セットのスキーマ情報を返す場合は、MissingSchemaActionAddWithKeyを指定し、Fill メソッドを呼び出すときにスキーマ情報を取得することをお勧めします。

関連項目