DataAdapter DataTable と DataColumn のマップDataAdapter DataTable and DataColumn Mappings

DataAdapterには、そのTableMappingsプロパティ内のDataTableMapping 0 個以上のオブジェクトのコレクションが含まれています。A DataAdapter contains a collection of zero or more DataTableMapping objects in its TableMappings property. DataTableMappingは、データソースに対するクエリから返されたデータとのDataTable間のマスターマッピングを提供します。A DataTableMapping provides a master mapping between the data returned from a query against a data source, and a DataTable. DataTableMapping名は、 DataAdapterFillメソッドにDataTable名の代わりに渡すことができます。The DataTableMapping name can be passed in place of the DataTable name to the Fill method of the DataAdapter. 次の例では、 Authorsmappingという名前の Authorsテーブルを作成します。The following example creates a DataTableMapping named AuthorsMapping for the Authors table.

workAdapter.TableMappings.Add("AuthorsMapping", "Authors")  
workAdapter.TableMappings.Add("AuthorsMapping", "Authors");  

DataTableMappingを使用すると、データベース内の列名とは異なる列名をDataTableで使用できます。A DataTableMapping enables you to use column names in a DataTable that are different from those in the database. DataAdapterは、テーブルが更新されたときに、マッピングを使用して列を照合します。The DataAdapter uses the mapping to match the columns when the table is updated.

DataadapterFillまたはUpdateメソッドを呼び出すときにTableNameまたはDataTableMapping名を指定しない場合、 dataadapterは "Table" という名前のDataTableMappingを検索します。If you do not specify a TableName or a DataTableMapping name when calling the Fill or Update method of the DataAdapter, the DataAdapter looks for a DataTableMapping named "Table". このDataTableMappingが存在しない場合、 DataTableTableNameは "Table" になります。If that DataTableMapping does not exist, the TableName of the DataTable is "Table". 既定のDataTableMappingを指定するには、"Table" という名前のDataTableMappingを作成します。You can specify a default DataTableMapping by creating a DataTableMapping with the name of "Table".

次のコード例では 、( System.Data.Common名前空間から) DataTableMapping を作成し、"Table" という名前を付けて、指定したDataAdapterの既定のマッピングにします。The following code example creates a DataTableMapping (from the System.Data.Common namespace) and makes it the default mapping for the specified DataAdapter by naming it "Table". この例では、クエリ結果の最初のテーブル ( northwindデータベースのCustomersテーブル) の列を、のDataSet northwind Customersテーブルのユーザーフレンドリ名のセットにマップします。The example then maps the columns from the first table in the query result (the Customers table of the Northwind database) to a set of more user-friendly names in the Northwind Customers table in the DataSet. 割り当てられない列には、データ ソースの列名が使用されます。For columns that are not mapped, the name of the column from the data source is used.

Dim mapping As DataTableMapping = _  
  adapter.TableMappings.Add("Table", "NorthwindCustomers")  
mapping.ColumnMappings.Add("CompanyName", "Company")  
mapping.ColumnMappings.Add("ContactName", "Contact")  
mapping.ColumnMappings.Add("PostalCode", "ZIPCode")  
DataTableMapping mapping =   
  adapter.TableMappings.Add("Table", "NorthwindCustomers");  
mapping.ColumnMappings.Add("CompanyName", "Company");  
mapping.ColumnMappings.Add("ContactName", "Contact");  
mapping.ColumnMappings.Add("PostalCode", "ZIPCode");  

より高度な状況では、同じDataAdapterで異なるマッピングを持つ異なるテーブルの読み込みをサポートするように設定できます。In more advanced situations, you may decide that you want the same DataAdapter to support loading different tables with different mappings. これを行うには、単に追加のDataTableMappingオブジェクトを追加します。To do this, simply add additional DataTableMapping objects.

FillメソッドにDataSetのインスタンスとDataTableMapping名が渡されたときに、その名前を持つマッピングが存在する場合は、その名前が使用されます。それ以外の場合は、その名前のDataTableが使用されます。When the Fill method is passed an instance of a DataSet and a DataTableMapping name, if a mapping with that name exists it is used; otherwise, a DataTable with that name is used.

次の例では、 customersという名前のDataTableMappingと、スキーマDataTable名を作成します。The following examples create a DataTableMapping with a name of Customers and a DataTable name of BizTalkSchema. 次に、SELECT ステートメントによって返された行を データテーブルにマップします。The example then maps the rows returned by the SELECT statement to the BizTalkSchema DataTable.

Dim mapping As ITableMapping = _  
  adapter.TableMappings.Add("Customers", "BizTalkSchema")  
mapping.ColumnMappings.Add("CustomerID", "ClientID")  
mapping.ColumnMappings.Add("CompanyName", "ClientName")  
mapping.ColumnMappings.Add("ContactName", "Contact")  
mapping.ColumnMappings.Add("PostalCode", "ZIP")  
adapter.Fill(custDS, "Customers")  
ITableMapping mapping =   
  adapter.TableMappings.Add("Customers", "BizTalkSchema");  
mapping.ColumnMappings.Add("CustomerID", "ClientID");  
mapping.ColumnMappings.Add("CompanyName", "ClientName");  
mapping.ColumnMappings.Add("ContactName", "Contact");  
mapping.ColumnMappings.Add("PostalCode", "ZIP");  
adapter.Fill(custDS, "Customers");  


列マップにソースの列名を指定しなかった場合、またはテーブル マップにソース テーブル名を指定しなかった場合は、自動的に既定の名前が生成されます。If a source column name is not supplied for a column mapping or a source table name is not supplied for a table mapping, default names will be automatically generated. 列マッピングにソース列が指定されていない場合、列マッピングにはSourceColumn1で始まるSourceColumn Nという増分の既定の名前が付けられます。If no source column is supplied for a column mapping, the column mapping is given an incremental default name of SourceColumn N, starting with SourceColumn1. テーブルマッピングにソーステーブル名が指定されていない場合、テーブルマッピングには、 SourceTable1で始まるSourceTable Nという増分の既定の名前が与えられます。If no source table name is supplied for a table mapping, the table mapping is given an incremental default name of SourceTable N, starting with SourceTable1.


列マッピングの場合は、 SourceColumn nの名前付け規則を使用しないことをお勧めします。また、指定した名前がの 既存の既定の列マッピング名と競合する可能性があるため、テーブルマッピングの場合は SourceTable n を使用することをお勧めします。使用の ColumnMappingCollectionまたはテーブルマッピング名。We recommend that you avoid the naming convention of SourceColumn N for a column mapping, or SourceTable N for a table mapping, because the name you supply may conflict with an existing default column mapping name in the ColumnMappingCollection or table mapping name in the DataTableMappingCollection. 指定した名前が既に存在する場合は、例外がスローされます。If the supplied name already exists, an exception will be thrown.

複数の結果セットの処理Handling Multiple Result Sets

SelectCommandが複数のテーブルを返す場合、 Fillは、データセット内のテーブルの増分値を使用してテーブル名を自動的に生成します。指定されたテーブル名から始まり、その後にTableNameという形式で続きます。NTableName1で始まります。If your SelectCommand returns multiple tables, Fill automatically generates table names with incremental values for the tables in the DataSet, starting with the specified table name and continuing on in the form TableName N, starting with TableName1. テーブルマッピングを使用すると、自動的に生成されたテーブル名を、データセット内のテーブルに対して指定した名前にマップできます。You can use table mappings to map the automatically generated table name to a name you want specified for the table in the DataSet. たとえば、 CustomersおよびOrdersという2つのテーブルを返すSelectCommandの場合、 Fillの次の呼び出しを発行します。For example, for a SelectCommand that returns two tables, Customers and Orders, issue the following call to Fill.

adapter.Fill(customersDataSet, "Customers")  

データセットには、次の2つのテーブルが作成されます。お客様Customers1Two tables are created in the DataSet: Customers and Customers1. テーブルマッピングを使用すると、2番目のテーブルにCustomers1の代わりにOrdersという名前が付けられるようにすることができます。You can use table mappings to ensure that the second table is named Orders instead of Customers1. これを行うには、次の例に示すように、 Customers1のソーステーブルをデータセットテーブルのOrdersにマップします。To do this, map the source table of Customers1 to the DataSet table Orders, as shown in the following example.

adapter.TableMappings.Add("Customers1", "Orders")  
adapter.Fill(customersDataSet, "Customers")  

関連項目See also