DataSet への既存の制約の追加Adding Existing Constraints to a DataSet

DataAdapterFillメソッドは、データソースのテーブルの列と行のみを含む DataSet にデータを格納します。制約は通常、データソースによって設定されますが、 Fillメソッドは、既定ではこのスキーマ情報をデータセットに追加しません。The Fill method of the DataAdapter fills a DataSet only with table columns and rows from a data source; though constraints are commonly set by the data source, the Fill method does not add this schema information to the DataSet by default. データソースからの既存の primary key 制約情報をDataSetに設定するには、 dataadapterFillSchemaメソッドを呼び出すか、 dataadapterMissingSchemaActionプロパティを設定します。Fillを呼び出す前に、 addwithkeyに設定します。To populate a DataSet with existing primary key constraint information from a data source, you can either call the FillSchema method of the DataAdapter, or set the MissingSchemaAction property of the DataAdapter to AddWithKey before calling Fill. これにより、データセット内の primary key 制約がデータソースの主キー制約を反映するようになります。This will ensure that primary key constraints in the DataSet reflect those at the data source. 外部キー制約情報は含まれていません。 DataTable 制約に示すように、明示的に作成する必要があります。Foreign key constraint information is not included and must be created explicitly, as shown in DataTable Constraints.

データを格納する前に、データセットにスキーマ情報を追加することで、データセット内の DataTable オブジェクトに主キー制約が確実に含まれるようになります。Adding schema information to a DataSet before filling it with data ensures that primary key constraints are included with the DataTable objects in the DataSet. その結果、データセットへの追加の呼び出しが行われたときに、主キー列の情報が使用され、データソースからの新しい行と各DataTableの現在の行が一致します。テーブル内の現在のデータは、データソース。As a result, when additional calls to fill the DataSet are made, the primary key column information is used to match new rows from the data source with current rows in each DataTable, and current data in the tables is overwritten with data from the data source. スキーマ情報がない場合、データソースからの新しい行がデータセットに追加され、行が重複します。Without the schema information, the new rows from the data source are appended to the DataSet, resulting in duplicate rows.

注意

データソース内の列が自動インクリメントとして識別された場合、 FillSchemaメソッド、またはMissingSchemaActionAddwithkeyであるFillメソッドによって、 autoincrementプロパティを持つDataColumnが作成されます。を true に設定します。If a column in a data source is identified as auto-incrementing, the FillSchema method, or the Fill method with a MissingSchemaAction of AddWithKey, creates a DataColumn with an AutoIncrement property set to true. ただし、 AutoIncrementStepAutoIncrementSeedの値を自分で設定する必要があります。However, you will need to set the AutoIncrementStep and AutoIncrementSeed values yourself. 自動インクリメント列の詳細については、「自動インクリメント列の作成」を参照してください。For more information about auto-incrementing columns, see Creating AutoIncrement Columns.

FillSchemaを使用するか、 MissingSchemaActionaddwithkeyに設定するには、主キー列の情報を決定するためにデータソースで追加の処理が必要です。Using FillSchema or setting the MissingSchemaAction to AddWithKey requires extra processing at the data source to determine primary key column information. この追加の処理によりパフォーマンスが低下する場合があります。This additional processing can hinder performance. デザイン時に主キー情報がわかっている場合は、最適のパフォーマンスを得るために主キー列 (複数の場合もある) を明示的に指定することをお勧めします。If you know the primary key information at design time, we recommend that you explicitly specify the primary key column or columns in order to achieve optimal performance. テーブルの主キー情報を明示的に設定する方法については、「主キーの定義」を参照してください。For information about explicitly setting primary key information for a table, see Defining Primary Keys.

次のコード例は、 FillSchemaを使用してデータセットにスキーマ情報を追加する方法を示しています。The following code example shows how to add schema information to a DataSet using FillSchema:

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");  

次のコード例では、 FillメソッドのMissingSchemaActionプロパティを使用して、データセットにスキーマ情報を追加する方法を示します。The following code example shows how to add schema information to a DataSet using the MissingSchemaAction.AddWithKey property of the Fill method:

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");  

複数の結果セットの処理Handling multiple result sets

データアダプターSelectCommandから返された複数の結果セットを検出すると、データセット内に複数のテーブルが作成されます。If the DataAdapter encounters multiple result sets returned from the SelectCommand, it will create multiple tables in the DataSet. テーブルには、インデックス番号が0から始まる既定のテーブル Nが割り当てられます。この名前は、"Table0" の代わりにtableで始まります。The tables will be given a zero-based incremental default name of Table N, starting with Table instead of "Table0". テーブル名がFillSchemaメソッドに引数として渡された場合、テーブルには、"TableName0" ではなくTablenameで始まるtablename Nの0から始まる増分名が割り当てられます。If a table name is passed as an argument to the FillSchema method, the tables will be given a zero-based incremental name of TableName N, starting with TableName instead of "TableName0".

注意

複数の結果セットを返すコマンドに対してOleDbDataAdapterオブジェクトのFillSchemaメソッドを呼び出すと、最初の結果セットのスキーマ情報のみが返されます。If the FillSchema method of the OleDbDataAdapter object is called for a command that returns multiple result sets, only the schema information from the first result set is returned. OleDbDataAdapterを使用して複数の結果セットのスキーマ情報を返す場合は、 addwithkeyMissingSchemaActionを指定し、 Fillを呼び出すときにスキーマ情報を取得することをお勧めします。b.When returning schema information for multiple result sets using the OleDbDataAdapter, it is recommended that you specify a MissingSchemaAction of AddWithKey and obtain the schema information when calling the Fill method.

関連項目See also