Сопоставления DataAdapter DataTable и DataColumnDataAdapter DataTable and DataColumn Mappings

Объект DataAdapter содержит коллекцию из нуля или более DataTableMapping объектов в своем свойстве TableMappings .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 может быть передано вместо имени DataTable в метод Fill объекта DataAdapter.The DataTableMapping name can be passed in place of the DataTable name to the Fill method of the DataAdapter. В следующем примере создается экземпляр DataTableMapping с именем Аусорсмаппинг для таблицы 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.

Если не указать имя TableName или экземпляр DataTableMapping при вызове метода Fill или Update объекта DataAdapter, то DataAdapter ищет экземпляр DataTableMapping с именем Table.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 не существует, то TableName объекта DataTable имеет значение Table.If that DataTableMapping does not exist, the TableName of the DataTable is "Table". Можно указать экземпляр DataTableMapping по умолчанию, создав экземпляр DataTableMapping с именем "Table".You can specify a default DataTableMapping by creating a DataTableMapping with the name of "Table".

Следующий пример кода создает экземпляр DataTableMapping (из пространства имен System.Data.Common) и делает его сопоставлением по умолчанию для указанного объекта DataAdapter , присваивая ему имя "Table".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". Затем в примере сопоставляются столбцы из первой таблицы в результатах запроса (таблица Customers базы данных Northwind ) с набором более понятных имен пользователей в таблице "Customers" в DataSet.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")  
  
adapter.Fill(custDS)  
DataTableMapping mapping =   
  adapter.TableMappings.Add("Table", "NorthwindCustomers");  
mapping.ColumnMappings.Add("CompanyName", "Company");  
mapping.ColumnMappings.Add("ContactName", "Contact");  
mapping.ColumnMappings.Add("PostalCode", "ZIPCode");  
  
adapter.Fill(custDS);  

В более сложных ситуациях может потребоваться, чтобы один и тот же 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 передается экземпляр набора данных и имя экземпляр DataTableMapping , если сопоставление с таким именем существует, оно используется; в противном случае используется Таблица данных с таким именем.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.

В следующих примерах создается экземпляр DataTableMapping с именем Customers и 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. Если для сопоставления столбцов не указан исходный столбец, сопоставлению столбцов присваивается добавочное имя по умолчанию SourceColumn N, начиная с SourceColumn1.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. Если для сопоставления таблицы не указано имя исходной таблицы, сопоставлению таблицы присваивается добавочное имя по умолчанию SourceTable N, начиная с SourceTable1.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 для сопоставления таблиц, так как указываемое имя может конфликтовать с существующим именем сопоставления столбцов по умолчанию в Колумнмаппингколлектион или имя сопоставления таблицы в дататаблемаппингколлектион.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 . N, начиная с TableName1.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. Например, для SelectCommand , возвращающего две таблицы, Customers и Orders, выполните следующий вызов функции Fill.For example, for a SelectCommand that returns two tables, Customers and Orders, issue the following call to Fill.

adapter.Fill(customersDataSet, "Customers")  
adapter.Fill(customersDataSet, "Customers");  

В наборе данныхсоздаются две таблицы: Customers и Customers1.Two tables are created in the DataSet: Customers and Customers1. Можно использовать сопоставления таблиц, чтобы гарантировать, что вторая таблица будет называться Orders вместо Customers1.You can use table mappings to ensure that the second table is named Orders instead of Customers1. Для этого сопоставьте исходную таблицу Customers1 со столбцами таблицы набора данных ,как показано в следующем примере.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")  
adapter.TableMappings.Add("Customers1", "Orders");  
adapter.Fill(customersDataSet, "Customers");  

См. такжеSee also