Mapování adaptéru dat, datové tabulky a datového sloupce
Objekt DataAdapter obsahuje kolekci nulových nebo více DataTableMapping objektů ve vlastnosti TableMappings . DataTableMapping poskytuje primární mapování mezi daty vrácenými z dotazu na zdroj dat a .DataTable Název DataTableMapping lze předat místo názvu DataTable metodě Fill DataAdapter. Následující příklad vytvoří DataTableMapping s názvem AuthorsMapping pro tabulku Authors.
workAdapter.TableMappings.Add("AuthorsMapping", "Authors")
workAdapter.TableMappings.Add("AuthorsMapping", "Authors");
DataTableMapping umožňuje používat názvy sloupců v tabulce DataTable, které se liší od názvů v databázi. DataAdapter používá mapování tak, aby odpovídaly sloupcům při aktualizaci tabulky.
Pokud při volání metody Fill nebo Update objektu DataAdapter nezadáte název TableName nebo DataTableMapping, dataAdapter hledá DataTableMapping s názvem Table. Pokud dataTableMapping neexistuje, tableName datové tabulky je "Tabulka". Výchozí dataTableMapping můžete zadat tak, že vytvoříte dataTableMapping s názvem "Tabulka".
Následující příklad kódu vytvoří DataTableMapping (z System.Data.Common oboru názvů) a nastaví ho jako výchozí mapování pro zadaný objekt DataAdapter pojmenováním tabulky. Příklad pak namapuje sloupce z první tabulky ve výsledku dotazu ( tabulka Customers databáze Northwind ) na sadu uživatelsky přívětivějších názvů v tabulce Northwind Customers v DataSettabulce . U sloupců, které nejsou namapované, se použije název sloupce ze zdroje dat.
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);
V pokročilejších situacích se můžete rozhodnout, že chcete, aby stejný datovýadapter podporoval načítání různých tabulek s různými mapováními. Uděláte to jednoduše tak, že přidáte další objekty DataTableMapping .
Pokud je metoda Fill předána instance DataSet a DataTableMapping název, pokud mapování s tímto názvem existuje, použije se. V opačném případě se použije DataTable s tímto názvem.
Následující příklady vytvoří DataTableMapping s názvem Customers a dataTable name of BizTalkSchema. Příklad pak mapuje řádky vrácené příkazem SELECT na 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");
Poznámka:
Pokud název zdrojového sloupce není zadán pro mapování sloupců nebo není zadán název zdrojové tabulky pro mapování tabulky, výchozí názvy se automaticky vygenerují. Pokud pro mapování sloupců není zadán žádný zdrojový sloupec, je mapování sloupců přiřazeno přírůstkový výchozí název SourceColumn N počínaje sourceColumn1. Pokud pro mapování tabulky není zadán žádný název zdrojové tabulky, je mapování tabulky přiřazeno přírůstkovým výchozím názvem SourceTable N počínaje tabulkou SourceTable1.
Poznámka:
Doporučujeme, abyste se vyhnuli konvenci pojmenování SourceColumn N pro mapování sloupců nebo SourceTable N pro mapování tabulky, protože zadaný název může být v konfliktu s existujícím výchozím názvem mapování sloupců v názvu Mapování sloupce ColumnMappingCollection nebo název mapování tabulky v DataTableMappingCollection. Pokud zadaný název již existuje, vyvolá se výjimka.
Zpracování více sad výsledků
Pokud selectCommand vrátí více tabulek, Fill automaticky vygeneruje názvy tabulek s přírůstkovými hodnotami pro tabulky v datové sadě, počínaje zadaným názvem tabulky a pokračováním ve formuláři TableName N počínaje TableName1. Pomocí mapování tabulek můžete namapovat automaticky vygenerovaný název tabulky na název, který chcete zadat pro tabulku v datové sadě. Například pro SelectCommand , který vrací dvě tabulky, Customers a Orders, zadejte následující volání Fill.
adapter.Fill(customersDataSet, "Customers")
adapter.Fill(customersDataSet, "Customers");
V datové sadě se vytvoří dvě tabulky: Zákazníci a Zákazníci1. Pomocí mapování tabulek můžete zajistit, aby se druhá tabulka jmenovala Objednávky místo Customers1. Uděláte to tak, že namapujte zdrojovou tabulku Customers1 na tabulku Objednávky datové sady, jak je znázorněno v následujícím příkladu.
adapter.TableMappings.Add("Customers1", "Orders")
adapter.Fill(customersDataSet, "Customers")
adapter.TableMappings.Add("Customers1", "Orders");
adapter.Fill(customersDataSet, "Customers");