Megosztás a következőn keresztül:


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

Lásd még