DataAdapter DataTable- en DataColumn-toewijzingen
Een DataAdapter bevat een verzameling van nul of meer DataTableMapping objecten in de eigenschap TableMappings . Een DataTableMapping biedt een primaire toewijzing tussen de gegevens die worden geretourneerd door een query op basis van een gegevensbron en een DataTable. De naam DataTableMapping kan worden doorgegeven in plaats van de naam van de gegevenstabel aan de methode Fill van de DataAdapter. In het volgende voorbeeld wordt een DataTableMapping met de naam AuthorsMapping gemaakt voor de tabel Auteurs .
workAdapter.TableMappings.Add("AuthorsMapping", "Authors")
workAdapter.TableMappings.Add("AuthorsMapping", "Authors");
Met DataTableMapping kunt u kolomnamen gebruiken in een gegevenstabel die afwijken van die in de database. De DataAdapter gebruikt de toewijzing om de kolommen te vinden wanneer de tabel wordt bijgewerkt.
Als u geen TableName of een DataTableMapping-naam opgeeft bij het aanroepen van de methode Fill of Update van de DataAdapter, zoekt de DataAdapter naar een DataTableMapping met de naam 'Tabel'. Als die DataTableMapping niet bestaat, is de tabelnaam van de gegevenstabel 'Tabel'. U kunt een standaard DataTableMapping opgeven door een DataTableMapping te maken met de naam 'Tabel'.
In het volgende codevoorbeeld wordt een DataTableMapping (van de System.Data.Common naamruimte) gemaakt en wordt deze standaardtoewijzing voor de opgegeven DataAdapter gemaakt door deze de naam 'Table' te geven. In het voorbeeld worden vervolgens de kolommen uit de eerste tabel in het queryresultaat (de tabel Klanten van de Database Northwind ) toegewezen aan een set meer gebruiksvriendelijke namen in de tabel Northwind Customers in de DataSettabel . Voor kolommen die niet zijn toegewezen, wordt de naam van de kolom uit de gegevensbron gebruikt.
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);
In meer geavanceerde situaties kunt u besluiten dat dezelfde DataAdapter ondersteuning biedt voor het laden van verschillende tabellen met verschillende toewijzingen. Hiervoor voegt u gewoon extra DataTableMapping-objecten toe.
Wanneer de fill-methode wordt doorgegeven aan een exemplaar van een DataSet en een DataTableMapping-naam , als er een toewijzing met die naam bestaat, wordt deze gebruikt. Anders wordt een Gegevenstabel met die naam gebruikt.
In de volgende voorbeelden wordt een DataTableMapping gemaakt met de naam Klanten en een DataTable-naam van BizTalkSchema. In het voorbeeld worden vervolgens de rijen die door de SELECT-instructie worden geretourneerd, toegewezen aan de 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");
Notitie
Als er geen bronkolomnaam wordt opgegeven voor een kolomtoewijzing of als er geen brontabelnaam wordt opgegeven voor een tabeltoewijzing, worden standaardnamen automatisch gegenereerd. Als er geen bronkolom wordt opgegeven voor een kolomtoewijzing, krijgt de kolomtoewijzing een incrementele standaardnaam van SourceColumn N, te beginnen met SourceColumn1. Als er geen brontabelnaam wordt opgegeven voor een tabeltoewijzing, krijgt de tabeltoewijzing een incrementele standaardnaam van SourceTable N, te beginnen met SourceTable1.
Notitie
We raden u aan om de naamconventie van SourceColumn N voor een kolomtoewijzing of SourceTable N voor een tabeltoewijzing te vermijden, omdat de naam die u opgeeft, mogelijk conflicteert met een bestaande standaardnaam voor kolomtoewijzing in de naam ColumnMappingCollection of tabeltoewijzing in de DataTableMappingCollection. Als de opgegeven naam al bestaat, wordt er een uitzondering gegenereerd.
Meerdere resultatensets verwerken
Als uw SelectCommand meerdere tabellen retourneert, genereert Fill automatisch tabelnamen met incrementele waarden voor de tabellen in de DataSet, te beginnen met de opgegeven tabelnaam en door te gaan in het formulier TableName N, te beginnen met TableName1. U kunt tabeltoewijzingen gebruiken om de automatisch gegenereerde tabelnaam toe te wijzen aan een naam die u wilt opgeven voor de tabel in de DataSet. Voor een SelectCommand die bijvoorbeeld twee tabellen retourneert, Klanten en Orders, voert u de volgende aanroep uit om op te vullen.
adapter.Fill(customersDataSet, "Customers")
adapter.Fill(customersDataSet, "Customers");
Er worden twee tabellen gemaakt in de DataSet: Klanten en Klanten1. U kunt tabeltoewijzingen gebruiken om ervoor te zorgen dat de tweede tabel Orders heet in plaats van Klanten1. U doet dit door de brontabel van Customers1 toe te wijzen aan de DataSet-tabel Orders, zoals wordt weergegeven in het volgende voorbeeld.
adapter.TableMappings.Add("Customers1", "Orders")
adapter.Fill(customersDataSet, "Customers")
adapter.TableMappings.Add("Customers1", "Orders");
adapter.Fill(customersDataSet, "Customers");