Element DataAdapter DataTable i mapowania elementu DataColumn

Element DataAdapter zawiera kolekcję zero lub więcej DataTableMapping obiektów we właściwości TableMappings . DataTableMapping zapewnia mapowanie wzorca między danymi zwracanymi z zapytania do źródła danych i DataTable . Nazwę DataTableMapping można przesłać zamiast nazwy DataTable do metody Fill elementu DataAdapter. Poniższy przykład tworzy DataTableMapping o nazwie AuthorsMapping dla tabeli autorów .

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

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

Jeśli nie określisz nazwy TableName lub DataTableMapping podczas wywoływania metody Fill lub Update elementu DataAdapter, obiekt DataAdapter szuka DataTableMapping o nazwie "Table". Jeśli DataTableMapping nie istnieje, tabelaname tabeli DataTable ma wartość "Table". Można określić domyślny DataTableMapping , tworząc DataTableMapping o nazwie "Table".

Poniższy przykład kodu tworzy DataTableMapping (z System.Data.Common przestrzeni nazw) i tworzy mapowanie domyślne dla określonego elementu DataAdapter przez nadanie jej nazwy "Table". Następnie przykład mapuje kolumny z pierwszej tabeli w wyniku zapytania (tabela Customers bazy danych Northwind ) do zestawu większej liczby przyjaznych nazw użytkowników w tabeli Klienci Northwind w DataSet . W przypadku kolumn, które nie są zamapowane, 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 przenoszona do wystąpienia zestawu danych i nazwy DataTableMapping , jeśli istnieje mapowanie o tej nazwie, jest ono używane; w przeciwnym razie zostanie użyta tabela DataTable o tej nazwie.

Poniższe przykłady umożliwiają utworzenie DataTableMapping z nazwą klientów i nazwą elementu DataTable BizTalkSchema. Następnie przykład mapuje wiersze zwracane przez instrukcję SELECT do elementu DataTable BizTalkSchema .

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 nie podano nazwy kolumny źródłowej dla mapowania kolumn lub nie podano nazwy tabeli źródłowej dla mapowania tabeli, automatycznie generowane są domyślne nazwy. Jeśli nie podano kolumny źródłowej dla mapowania kolumn, mapowanie kolumny otrzymuje przyrostową domyślną nazwę SourceColumn N, rozpoczynając od SourceColumn1. Jeśli nie podano nazwy tabeli źródłowej dla mapowania tabeli, mapowanie tabeli uzyskuje przyrostową domyślną nazwę elementu SourceName N, rozpoczynając od SourceTable1.

Uwaga

Zalecamy uniknięcie konwencji nazewnictwa elementu SourceColumn N na potrzeby mapowania kolumn lub elementu sources n dla mapowania tabeli, ponieważ dostarczona nazwa może powodować konflikt z istniejącą domyślną nazwą mapowania kolumn w DataTableMappingCollection. Jeśli podana nazwa już istnieje, zostanie zgłoszony wyjątek.

Obsługa wielu zestawów wyników

Jeśli Właściwość SelectCommand zwraca wiele tabel, Funkcja Fill automatycznie generuje nazwy tabel z przyrostowymi wartościami dla tabel w zestawie danych, rozpoczynając od określonej nazwy tabeli i kontynuuje w formularzu TableName N, rozpoczynając od TableName1. Mapowania tabeli można użyć, aby zamapować automatycznie wygenerowaną nazwę tabeli na nazwę, która ma być określona dla tabeli w zestawie danych. Na przykład dla elementu SelectCommand , który zwraca dwie tabele, klienci i zamówienia, wydaj następujące wywołanie do wypełnienia.

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

W zestawie danych są tworzone dwie tabele: Customers i Customers1. Mapowania tabel można użyć, aby upewnić się, że druga tabela ma nazwę Orders zamiast Customers1. W tym celu należy zmapować tabelę źródłową Customers1 do kolejności tabel 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ż