Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: .NET Framework
.NET .NET
Standard
Ein SqlDataAdapter enthält in seiner TableMappings-Eigenschaft eine Sammlung von null oder mehr DataTableMapping-Objekten. Eine DataTableMapping-Klasse stellt eine Hauptzuordnung zwischen den bei einer Abfrage einer Datenquelle zurückgegebenen Daten und einer DataTable-Klasse bereit. Der DataTableMapping-Name kann anstelle des DataTable-Namens an die Fill-Methode der DataAdapter-Klasse übergeben werden. Im folgenden Beispiel wird eine DataTableMapping-Klasse mit dem Namen AuthorsMapping für die Tabelle Authors erstellt.
workAdapter.TableMappings.Add("AuthorsMapping", "Authors");
Mit einer DataTableMapping-Klasse können Sie in einer DataTable-Klasse andere Spaltennamen als in der Datenbank verwenden. Der DataAdapter verwendet die Zuordnung, um die Spalten beim Aktualisieren der Tabelle einander zuzuordnen.
Hinweis
Wenn Sie beim Aufrufen der Fill-Methode oder der Update-Methode der DataAdapter-Klasse die TableName-Eigenschaft oder den DataTableMapping-Namen nicht angeben, sucht die DataAdapter-Klasse nach einer DataTableMapping-Klasse mit dem Namen Table. Der TableName der DataTable ist „Table“, wenn diese DataTableMapping nicht vorhanden ist. Sie können eine Standard-DataTableMapping-Klasse angeben, indem Sie eine DataTableMapping-Klasse mit dem Namen Table erstellen.
Im folgenden Codebeispiel wird eine DataTableMapping-Klasse (aus dem System.Data.Common-Namespace) erstellt und zur Standardzuordnung für die angegebene DataAdapter-Klasse gemacht, indem sie Table genannt wird. Das Beispiel ordnet anschließend die Spalten in der ersten Tabelle des Abfrageergebnisses (die Customers-Tabelle der Northwind-Datenbank) einer Gruppe benutzerfreundlicherer Namen in der Northwind Customers-Tabelle in der DataSet-Klasse zu. Für Spalten, die nicht zugeordnet werden, wird der Name der Spalte in der Datenquelle verwendet.
// 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 fortgeschritteneren Szenarien können Sie festlegen, dass derselbe DataAdapter das Laden unterschiedlicher Tabellen mit unterschiedlichen Zuordnungen unterstützt. Fügen Sie hierfür weitere DataTableMapping-Objekte hinzu.
Wenn der Fill-Methode eine Instanz einer DataSet-Klasse und ein DataTableMapping-Name übergeben werden, wird die Zuordnung mit diesem Namen verwendet, sofern vorhanden. Andernfalls wird eine DataTable-Klasse mit diesem Namen verwendet.
Im folgenden Beispiel werden eine DataTableMapping-Klasse mit dem Namen Customers und eine DataTable-Klasse mit dem Namen BizTalkSchema erstellt. Das Beispiel bildet dann die von der SELECT-Anweisung zurückgegebenen Zeilen auf die BizTalkSchemaDataTable ab.
// 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);
Hinweis
Wenn für eine Spaltenzuordnung kein Quellspaltenname bereitgestellt wird, werden automatisch Standardnamen generiert. Wenn keine Quellspalte für eine Spaltenzuordnung angegeben ist, erhält die Spaltenzuordnung einen Standardnamen nach dem Muster SourceColumnN, beginnend mit SourceColumn1.
Hinweis
Wenn für eine Tabellenzuordnung kein Quelltabellenname bereitgestellt wird, werden automatisch Standardnamen generiert. Wenn kein Quelltabellenname für eine Tabellenzuordnung angegeben ist, so erhält die Tabellenzuordnung einen Standardnamen nach dem Muster SourceTableN, beginnend mit SourceTable1.
Hinweis
Es wird davon abgeraten, die Benennungskonvention SourceColumnN für eine Spaltenzuordnung oder SourceTableN für eine Tabellenzuordnung zu verwenden, da der von Ihnen vergebene Name möglicherweise einen Konflikt mit einem bereits vorhandenen Standard-Spaltenzuordnungsnamen in der ColumnMappingCollection-Klasse oder Standard-Tabellenzuordnungsnamen in der DataTableMappingCollection-Klasse verursacht. Wenn der angegebene Name bereits vorhanden ist, wird eine Ausnahme ausgelöst.
Mehrere Ergebnismengen verarbeiten
Wenn SelectCommand mehrere Tabellen zurückgibt, generiert die Fill-Methode automatisch Tabellennamen mit inkrementellen Werten für die Tabellen in der DataSet-Klasse. Der angegebene Tabellenname kommt zuerst, und die folgenden Tabellen werden nach dem Muster TableNameN benannt, beginnend mit TableName1. Sie können Tabellenzuordnungen verwenden, um den automatisch generierten Tabellennamen einem gewünschten Namen zuzuordnen, der für die Tabelle im DataSet angegeben werden soll. Rufen Sie beispielsweise für ein SelectCommand-Objekt, das die beiden Tabellen Customers und Orders zurückgibt, die Fill-Methode folgendermaßen auf.
adapter.Fill(customersDataSet, "Customers");
In der DataSet-Klasse 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. Hierfür ordnen Sie der Quelltabelle von Customers1 die DataSet-Tabelle Orders zu, wie im folgenden Beispiel zu sehen.
// 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");