Freigeben über


DataAdapter-, DataTable- und DataColumn-Mappings (ADO.NET)

Aktualisiert: November 2007

Ein DataAdapter enthält eine Auflistung von 0 (null) oder mehreren DataTableMapping-Objekten in seiner TableMappings-Eigenschaft. Eine DataTableMapping stellt eine Masterzuordnung zwischen den nach einer Abfrage einer Datenquelle zurückgegebenen Daten und einer DataTable bereit. Der DataTableMapping-Name kann anstelle des DataTable-Namens an die Fill-Methode des DataAdapter übergeben werden. Im folgenden Beispiel wird eine DataTableMapping mit dem Namen AuthorsMapping für die Authors-Tabelle erstellt.

workAdapter.TableMappings.Add("AuthorsMapping", "Authors")
workAdapter.TableMappings.Add("AuthorsMapping", "Authors");

Mithilfe von DataTableMapping können Sie in einer DataTable andere Spaltennamen als in der Datenbank verwenden. Der DataAdapter gleicht bei der Aktualisierung der Tabelle mithilfe der Zuordnung die Spalten miteinander ab.

Wenn Sie beim Aufruf der Fill-Methode oder der Update-Methode des DataAdapter keinen TableName oder DataTableMapping-Namen angeben, sucht der DataAdapter nach einer DataTableMapping mit dem Namen "Table". Wenn DataTableMapping nicht vorhanden ist, lautet der TableName von DataTable "Table". Sie können eine Standard-DataTableMapping angeben, indem Sie eine DataTableMapping mit dem Namen "Table" erstellen.

Im folgenden Beispiel wird eine DataTableMapping (aus dem System.Data.Common-Namespace) erstellt und zur Standardzuordnung für den angegebenen DataAdapter erklärt, indem sie als "Table" benannt wird. Das Beispiel ordnet anschließend die Spalten in der ersten Tabelle des Abfrageergebnisses (die Customers-Tabelle der Northwind-Datenbank) einer Gruppe von benutzerfreundlicheren Namen in der Northwind Customers-Tabelle im DataSet zu. Für Spalten, die nicht zugeordnet werden, wird der Name der Spalte in der Datenquelle verwendet.

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 komplexeren Situationen können Sie mit demselben DataAdapter das Laden verschiedener Tabellen mit verschiedenen Zuordnungen unterstützen. Hierfür fügen Sie einfach weitere DataTableMapping-Objekte hinzu.

Wenn der Fill-Methode eine Instanz des DataSet und ein DataTableMapping-Name übergeben wird, wird dieser verwendet, sofern eine Zuordnung mit diesem Namen vorhanden ist. Andernfalls wird eine DataTable mit diesem Namen verwendet.

Im folgenden Beispiel werden eine DataTableMapping mit dem Namen Customers und die DataTable mit dem Namen BizTalkSchema erstellt. Das Beispiel ordnet dann die von der SELECT-Anweisung zurückgegebenen Zeilen der BizTalkSchema-DataTable zu.

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

Wenn für eine Spaltenzuordnung kein Quellspaltenname bzw. für eine Tabellenzuordnung kein Quelltabellenname angegeben wird, werden automatisch Standardnamen generiert. Fehlt der Quellspaltenname einer Spaltenzuordnung, so erhält die Spaltenzuordnung den Standardnamen SourceColumnN, beginnend mit SourceColumn1, der jeweils um eins erhöht wird. Fehlt der Quelltabellenname einer Tabellenzuordnung, so erhält die Tabellenzuordnung den Standardnamen SourceTableN, beginnend mit SourceTable1, der jeweils um eins erhöht wird.

Hinweis:

Es wird davon abgeraten, die Benennungskonvention SourceColumnN für eine Spaltenzuordnung oder SourceTableN für eine Tabellenzuordnung zu verwenden, da dieser Name u. U. einen Konflikt mit einem bereits vorhandenen Standardspaltennamen in der ColumnMappingCollection oder mit einem bereits vorhandenen Standardtabellennamen in der DataTableMappingCollection verursacht. Wenn der angegebene Name bereits vorhanden ist, wird eine Ausnahme ausgelöst.

Umgang mit mehreren Resultsets

Wenn mit SelectCommand mehrere Tabellen zurückgegeben werden, werden mit der Fill-Methode automatisch Tabellennamen mit inkrementellen Werten für die Tabellen im DataSet generiert. Der angegebene Tabellenname kommt zuerst, und die folgenden Tabellen werden nach dem Schema TableNameN benannt, wobei mit TableName1 begonnen wird. Mit Tabellenzuordnungen können Sie den automatisch generierten Tabellennamen einem Namen zuordnen, der für die Tabelle im DataSet angegeben werden soll. Rufen Sie beispielsweise für eine SelectCommand-Eigenschaft, die die beiden Tabellen Customers und Orders zurückgibt, die Fill-Methode folgendermaßen auf.

adapter.Fill(customersDataSet, "Customers")

Im DataSet werden zwei Tabellen erstellt: Customers und Customers1. Mit Tabellenzuordnungen können Sie sicherstellen, dass die zweite Tabelle den Namen Orders und nicht Customers1 erhält. Zu diesem Zweck ordnen Sie der Quelltabelle Customers1 die DataSet-Tabelle Orders zu, wie es im folgenden Beispiel gezeigt wird.

adapter.TableMappings.Add("Customers1", "Orders")
adapter.Fill(customersDataSet, "Customers")

Siehe auch

Weitere Ressourcen

'DataAdapters' und 'DataReaders' (ADO.NET)

Abrufen und Ändern von Daten in ADO.NET