Share via


Toewijzingen van DataAdapter, DataTable en DataColumn

Van toepassing op: .NET Framework .NET Standard

ADO.NET downloaden

A SqlDataAdapter bevat een verzameling van nul of meer DataTableMapping objecten in de TableMappings eigenschap. Een DataTableMapping biedt een hoofdtoewijzing 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 Fill methode van de DataAdapter. In het volgende voorbeeld wordt een DataTableMapping met de naam AuthorsMapping gemaakt voor de tabel Auteurs .

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 matchen wanneer de tabel wordt bijgewerkt.

Opmerking

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'. De tabelnaam van de gegevenstabel is 'Tabel' als die DataTableMapping niet bestaat. 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 stelt dit in als de standaardtoewijzing voor de opgegeven DataAdapter 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.

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

In meer geavanceerde situaties kunt u besluiten dat dezelfde DataAdapter verschillende tabellen met verschillende koppelingen kan laden. Hiervoor voegt u 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 DataTable 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 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);

Opmerking

Als er geen bronkolomnaam wordt opgegeven voor een kolomtoewijzing, worden standaardnamen automatisch gegenereerd. De kolomtoewijzing krijgt een incrementele standaardnaam van SourceColumnN, te beginnen met SourceColumn1 als er geen bronkolom wordt opgegeven voor een kolomtoewijzing.

Opmerking

Als er geen brontabelnaam wordt opgegeven voor een tabelmapping, worden standaardnamen automatisch gegenereerd. De tabeltoewijzing krijgt een incrementele standaardnaam van SourceTableN, te beginnen met SourceTable1 als er geen brontabelnaam wordt opgegeven voor een tabeltoewijzing.

Opmerking

We raden u aan om de naamconventie van SourceColumnN voor een kolomtoewijzing of SourceTableN 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 resultaatsets 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 TableNameN, 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");

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-tabelOrders, zoals wordt weergegeven in het volgende voorbeeld.

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

Zie ook