Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: .NET Framework
.NET
Standard
Obiekt SqlDataAdapter zawiera kolekcję od zera do wielu obiektów DataTableMapping w swojej TableMappings właściwości. Obiekt DataTableMapping udostępnia główne mapowanie danych zwracanych z zapytania względem źródła danych i .DataTable Nazwę DataTableMapping można przekazać zamiast nazwy DataTable do Fill metody DataAdapter. Poniższy przykład tworzy obiekt DataTableMapping o nazwie AuthorsMapping dla tabeli Autorzy .
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.
Uwaga / Notatka
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". TableName obiektu DataTable to "Tabela", jeśli DataTableMapping nie istnieje. 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.
// Assumes that connection is a valid SqlConnection object.
DataSet custDataSet = new DataSet();
SqlDataAdapter custAdapter = new SqlDataAdapter(
"SELECT * FROM dbo.Customers", connection);
DataTableMapping mapping =
custAdapter.TableMappings.Add("Table", "NorthwindCustomers");
mapping.ColumnMappings.Add("CompanyName", "Company");
mapping.ColumnMappings.Add("ContactName", "Contact");
mapping.ColumnMappings.Add("PostalCode", "ZIPCode");
custAdapter.Fill(custDataSet);
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 dodaj dodatkowe obiekty DataTableMapping .
Kiedy metoda Fill otrzymuje instancję DataSet i nazwę DataTableMapping, jeśli istnieje mapowanie o tej nazwie, to jest ono używane; w przeciwnym razie używa się tabeli DataTable o tej nazwie.
W poniższych przykładach utworzono element DataTableMapping z nazwą Customers i nazwą DataTablebizTalkSchema. Następnie przykład mapuje wiersze zwracane przez instrukcję SELECT na tabelę BizTalkSchemaDataTable.
// Assumes that connection is a valid SqlConnection object.
DataSet custDataSet = new DataSet();
SqlDataAdapter custAdapter = new SqlDataAdapter(
"SELECT * FROM dbo.Customers", connection);
// The DataTableMapping is implemented ITableMapping.
ITableMapping mapping =
custAdapter.TableMappings.Add("Table", "BizTalkSchema");
mapping.ColumnMappings.Add("CustomerID", "ClientID");
mapping.ColumnMappings.Add("CompanyName", "ClientName");
mapping.ColumnMappings.Add("ContactName", "Contact");
mapping.ColumnMappings.Add("PostalCode", "ZIP");
custAdapter.Fill(custDataSet);
Uwaga / Notatka
Jeśli nazwa kolumny źródłowej nie zostanie podana dla mapowania kolumny, nazwy domyślne zostaną wygenerowane automatycznie. Mapowanie kolumn otrzymuje przyrostową nazwę domyślną kolumny SourceColumnN, zaczynając od kolumny SourceColumn1 , jeśli nie podano żadnej kolumny źródłowej na potrzeby mapowania kolumn.
Uwaga / Notatka
Jeśli nazwa tabeli źródłowej nie zostanie podana na potrzeby mapowania tabeli, nazwy domyślne zostaną wygenerowane automatycznie. Mapowanie tabeli ma przyrostową nazwę domyślną tabeli SourceTable N, począwszy od tabeli SourceTable1, jeśli nie podano nazwy tabeli źródłowej dla mapowania tabeli.
Uwaga / Notatka
Zalecamy unikanie stosowania konwencji nazewnictwa SourceColumnN dla mapowania kolumny lub SourceTableN dla mapowania tabeli, ponieważ podana nazwa może powodować konflikt z istniejącą domyślną nazwą mapowania kolumny w ColumnMappingCollection lub nazwą mapowania tabeli w 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 SelectCommand, który zwraca dwie tabele Customers i Orders, wydaj następujące wywołanie Fill.
adapter.Fill(customersDataSet, "Customers");
Dwie tabele zostały utworzone w 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 w zestawie danych DataSet, jak pokazano w poniższym przykładzie.
// Assumes that connection is a valid SqlConnection object.
string queryString =
"SELECT * FROM dbo.Customers; SELECT * FROM dbo.Orders;";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);
DataSet customersDataSet = new DataSet();
adapter.TableMappings.Add("Customers1", "Orders");
adapter.Fill(customersDataSet, "Customers");
Zobacz także
- Adaptery danych i Czytniki danych
- Pobieranie i modyfikowanie danych w ADO.NET
- Microsoft ADO.NET dla programu SQL Server