Element DataAdapter DataTable i mapowania elementu DataColumn

Obiekt DataAdapter zawiera kolekcję obiektów zero lub więcej DataTableMapping w jej właściwości TableMappings . Obiekt DataTableMapping udostępnia podstawowe mapowanie danych zwracanych z zapytania względem źródła danych i .DataTable Nazwę DataTableMapping można przekazać zamiast nazwy DataTable do metody Fill elementu DataAdapter. Poniższy przykład tworzy obiekt DataTableMapping o nazwie AuthorsMapping dla tabeli Autorzy.

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

Element DataTableMapping umożliwia używanie nazw kolumn w tabeli DataTable, które różnią się od tych w bazie danych. Narzędzie DataAdapter używa mapowania, aby dopasować kolumny podczas aktualizowania tabeli.

Jeśli nie określisz nazwy TableName lub DataTableMapping podczas wywoływania metody Fill lub Update elementu DataAdapter, funkcja DataAdapter szuka elementu DataTableMapping o nazwie "Tabela". Jeśli ten element DataTableMapping nie istnieje, parametr TableName tabeli DataTable to "Tabela". Możesz określić domyślną tabelę DataTableMapping , tworząc obiekt DataTableMapping o nazwie "Tabela".

Poniższy przykładowy kod tworzy obiekt DataTableMapping (z System.Data.Common przestrzeni nazw) i sprawia, że jest to domyślne mapowanie określonego elementu DataAdapter przez nadanie mu nazwy "Tabela". Następnie przykład mapuje kolumny z pierwszej tabeli w wyniku zapytania (tabela Customers bazy danych Northwind) na zestaw bardziej przyjaznych dla użytkownika nazw w tabeli Northwind Customers w tabeli DataSet. W przypadku kolumn, które nie są mapowane, używana jest nazwa kolumny ze źródła danych.

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

W bardziej zaawansowanych sytuacjach możesz zdecydować, że chcesz, aby ten sam element DataAdapter obsługiwał ładowanie różnych tabel z różnymi mapowaniami. W tym celu wystarczy dodać dodatkowe obiekty DataTableMapping .

Gdy metoda Fill jest przekazywana wystąpienie elementu DataSet i nazwę DataTableMapping, jeśli jest używane mapowanie o tej nazwie; w przeciwnym razie jest używana tabela DataTable o tej nazwie.

W poniższych przykładach utworzono element DataTableMapping z nazwą Customers i nazwą DataTable bizTalkSchema. Następnie przykład mapuje wiersze zwracane przez instrukcję SELECT na tabelę BizTalkSchemaDataTable.

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

Uwaga

Jeśli nazwa kolumny źródłowej nie zostanie podana dla mapowania kolumny lub nazwa tabeli źródłowej nie zostanie podana dla mapowania tabeli, nazwy domyślne zostaną wygenerowane automatycznie. Jeśli dla mapowania kolumny nie podano żadnej kolumny źródłowej, mapowanie kolumn ma przyrostową nazwę domyślną kolumny SourceColumnN, począwszy od kolumny SourceColumn1. Jeśli dla mapowania tabeli nie podano nazwy tabeli źródłowej, mapowanie tabeli otrzymuje przyrostową nazwę domyślną tabeli SourceTable N, począwszy od tabeli SourceTable1.

Uwaga

Zalecamy unikanie konwencji nazewnictwa kolumny SourceColumnN dla mapowania kolumny lub tabeli SourceTableN dla mapowania tabeli, ponieważ podana nazwa może powodować konflikt z istniejącą domyślną nazwą mapowania kolumn w kolumnie ColumnMappingCollection lub nazwa mapowania tabeli w tabeli DataTableMappingCollection. Jeśli podana nazwa już istnieje, zostanie zgłoszony wyjątek.

Obsługa wielu zestawów wyników

Jeśli funkcja SelectCommand zwraca wiele tabel, funkcja Fill automatycznie generuje nazwy tabel z wartościami przyrostowymi dla tabel w zestawie danych, począwszy od określonej nazwy tabeli i kontynuując w formularzu TableName N, począwszy od tabeli TableName1. Mapowania tabel umożliwiają mapowanie automatycznie wygenerowanej nazwy tabeli na nazwę, która ma zostać określona dla tabeli w zestawie danych. Na przykład w przypadku polecenia SelectCommand , który zwraca dwie tabele, Customers i Orders, wydaj następujące wywołanie funkcji Fill.

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

Dwie tabele są tworzone w zestawie danych DataSet: Customers i Customers1. Możesz użyć mapowań tabel, aby upewnić się, że druga tabela ma nazwę Orders zamiast Customers1. W tym celu zamapuj tabelę źródłową Customers1 na tabelę Orders (Zamówienia zestawu danych), jak pokazano w poniższym przykładzie.

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

Zobacz też