DataAdapter DataTable és DataColumn-leképezések
A DataAdapter a TableMappings tulajdonságában nulla vagy több DataTableMapping objektum gyűjteményét tartalmazza. A DataTableMapping elsődleges leképezést biztosít az adatforráshoz tartozó lekérdezésből visszaadott adatok és a DataTable. A DataTableMapping név átadható a DataTable név helyett a DataAdapter Fill metódusának. Az alábbi példa létrehoz egy AuthorsMapping nevű DataTableMapping fájlt a Szerzők táblához.
workAdapter.TableMappings.Add("AuthorsMapping", "Authors")
workAdapter.TableMappings.Add("AuthorsMapping", "Authors");
A DataTableMapping lehetővé teszi, hogy olyan oszlopneveket használjon a DataTable-ban , amelyek eltérnek az adatbázisban találhatóaktól. A DataAdapter a megfeleltetés használatával egyezik a táblázat frissítésekor használt oszlopokkal.
Ha nem ad meg TableName vagy DataTableMapping nevet a DataAdapter Fill vagy Update metódusának meghívásakor, a DataAdapter egy "Table" nevű DataTableMapping nevet keres. Ha a DataTableMapping nem létezik, a DataTable táblaneve "Table". Az alapértelmezett DataTableMapping beállításhoz hozzon létre egy DataTableMapping elemet "Table" néven.
Az alábbi kódpélda létrehoz egy DataTableMapping objektumot (a System.Data.Common névtérből), és a "Table" elnevezéssel a megadott DataAdapter alapértelmezett leképezése lesz. A példa ezután leképozza a lekérdezés eredményének első táblájának oszlopait (a Northwind-adatbázis Ügyfelek tábláját) egy felhasználóbarátabb névkészletre a Northwind Customers táblában.DataSet A nem leképezett oszlopok esetében a rendszer az adatforrásból származó oszlop nevét használja.
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);
Speciálisabb helyzetekben dönthet úgy, hogy ugyanazt a DataAdaptert szeretné támogatni a különböző táblák különböző leképezésekkel való betöltéséhez. Ehhez egyszerűen adjon hozzá további DataTableMapping objektumokat.
Ha a Kitöltő metódus átad egy DataSet-példányt és egy DataTableMapping-nevet, akkor a rendszer egy ilyen nevű leképezést használ, ellenkező esetben egy ilyen nevű Adattáblát használ.
Az alábbi példák létrehoznak egy DataTableMappingot az Ügyfelek és a BizTalkSchema DataTable nevével. A példa ezután leképozza a SELECT utasítás által visszaadott sorokat a BizTalkSchema DataTable értékre.
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");
Feljegyzés
Ha nem adja meg a forrásoszlop nevét egy oszlopleképezéshez, vagy a táblaleképezéshez nem adja meg a forrástábla nevét, a rendszer automatikusan létrehozza az alapértelmezett neveket. Ha egy oszlopleképezéshez nem ad meg forrásoszlopot, az oszlopleképezés a SourceColumn N növekményes alapértelmezett nevét kapja, a SourceColumn1-től kezdve. Ha egy táblaleképezéshez nem ad meg forrástáblanevet, a táblaleképezés a SourceTable N növekményes alapértelmezett nevét kapja, a SourceTable1-től kezdve.
Feljegyzés
Javasoljuk, hogy kerülje a SourceColumn N elnevezési konvencióját egy oszlopleképezéshez, vagy a SourceTable N nevet egy táblaleképezéshez, mert a megadott név ütközhet a DataTableMappingCollection oszlopában lévő alapértelmezett oszlopleképezési névvel vagy táblaleképezési névvel a DataTableMappingCollectionben. Ha a megadott név már létezik, a rendszer kivételt küld.
Több eredményhalmaz kezelése
Ha a SelectCommand több táblát ad vissza, a Fill automatikusan létrehozza az adathalmaz tábláinak növekményes értékeit tartalmazó táblázatneveket, kezdve a megadott táblanévvel, és a TableName N űrlapon folytatja a 1. táblanévvel kezdődően. A táblaleképezésekkel az automatikusan létrehozott táblanevet leképezheti az Adathalmaz táblához megadott névre. Ha például egy SelectCommand két táblát ad vissza, az Ügyfelek és a Rendelések lehetőséget, adja ki a következő hívást a Kitöltéshez.
adapter.Fill(customersDataSet, "Customers")
adapter.Fill(customersDataSet, "Customers");
Két tábla jön létre az Adatkészletben: Ügyfelek és Ügyfelek1. Táblaleképezések használatával gondoskodhat arról, hogy a második tábla Neve Rendelések legyen a Vevők1 helyett. Ehhez megfeleltetje a Vevők1 forrástábláját a Rendelések adathalmaz táblához, ahogyan az az alábbi példában is látható.
adapter.TableMappings.Add("Customers1", "Orders")
adapter.Fill(customersDataSet, "Customers")
adapter.TableMappings.Add("Customers1", "Orders");
adapter.Fill(customersDataSet, "Customers");