Einrichten von Datentabellen- und Datenspaltenzuordnungen
Ein DataAdapter-Objekt enthält eine Auflistung von null oder mehr DataTableMapping-Objekten in seiner TableMappings-Eigenschaft. Ein DataTableMapping-Objekt stellt eine Masterzuordnung zwischen den von einer Abfrage zurückgegebenen Daten für eine Datenquelle und einer DataTable bereit. Der DataTableMapping-Name kann anstelle des DataTable-Namens an die Fill-Methode des DataAdapter-Objekts übergeben werden. Im folgenden Beispiel wird ein DataTableMapping-Objekt mit der Bezeichnung AuthorsMapping für die MyAuthors-Tabelle erstellt.
workAdapter.TableMappings.Add("AuthorsMapping", "MyAuthors")
[C#]
workAdapter.TableMappings.Add("AuthorsMapping", "MyAuthors");
Mit einem DataTableMapping-Objekt können Sie Spaltennamen in einer DataTable verwenden, die von jenen in der Datenbank abweichen. Das DataAdapter-Objekt verwendet die Zuordnung zum Abgleich der Spalten, wenn die Tabelle aktualisiert wird.
Wenn Sie beim Aufrufen der Fill-Methode oder der Update-Methode des DataAdapter-Objekts keinen Namen für TableName oder DataTableMapping angeben, sucht das DataAdapter-Objekt nach einem DataTableMapping-Objekt mit dem Namen "Table". Wenn kein entsprechendes DataTableMapping-Objekt vorhanden ist, wird "Table" als TableName für die DataTable verwendet. Sie können ein DataTableMapping-Standardobjekt angeben, indem Sie ein DataTableMapping-Objekt mit dem Namen "Table" erstellen.
Im folgenden Beispiel wird ein DataTableMapping-Objekt (aus dem System.Data.Common-Namespace) erstellt und als Standardzuordnung für das angegebene DataAdapter-Objekt verwendet (indem der Name "Table" zugewiesen wird). Das Beispiel weist anschließend die Spalten in der ersten Tabelle des Abfrageergebnisses (die Customers-Tabelle in 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 custMap As DataTableMapping = custDA.TableMappings.Add("Table", "NorthwindCustomers")
custMap.ColumnMappings.Add( "CompanyName", "Company")
custMap.ColumnMappings.Add( "ContactName", "Contact")
custMap.ColumnMappings.Add( "PostalCode", "ZIPCode")
custDA.Fill(custDS)
[C#]
DataTableMapping custMap = custDA.TableMappings.Add("Table", "NorthwindCustomers");
custMap.ColumnMappings.Add( "CompanyName", "Company");
custMap.ColumnMappings.Add( "ContactName", "Contact");
custMap.ColumnMappings.Add( "PostalCode", "ZIPCode");
custDA.Fill(custDS);
In komplexeren Situationen können Sie mit demselben DataAdapter-Objekt das Laden verschiedener Tabellen mit verschiedenen Zuordnungen unterstützen. Dazu fügen Sie einfach weitere DataTableMapping-Objekte hinzu.
Wenn an die Fill-Methode eine Instanz eines DataSets und ein DataTableMapping-Name übergeben wird und eine Zuordnung dieses Namens vorhanden ist, wird sie verwendet. Andernfalls wird eine DataTable mit diesem Namen verwendet.
In den folgenden Beispielen wird ein DataTableMapping-Objekt mit dem Namen Customers und eine DataTable mit dem Namen BizTalkSchema erstellt. Das Beispielt ordnet die von der SELECT-Anweisung zurückgegebenen Zeilen anschließend der DataTable BizTalkSchema zu.
Dim bizMap As ITableMapping = custDA.TableMappings.Add("Customers", "BizTalkSchema")
bizMap.ColumnMappings.Add( "CustomerID", "ClientID")
bizMap.ColumnMappings.Add( "CompanyName", "ClientName")
bizMap.ColumnMappings.Add( "ContactName", "Contact")
bizMap.ColumnMappings.Add( "PostalCode", "ZIP")
custDA.Fill(custDS, "Customers")
[C#]
ITableMapping bizMap = custDA.TableMappings.Add("Customers", "BizTalkSchema");
bizMap.ColumnMappings.Add( "CustomerID", "ClientID");
bizMap.ColumnMappings.Add( "CompanyName", "ClientName");
bizMap.ColumnMappings.Add( "ContactName", "Contact");
bizMap.ColumnMappings.Add( "PostalCode", "ZIP");
custDA.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 Namen QuellspalteN, beginnend mit "Quellspalte1", der jeweils um eins erhöht wird. Fehlt der Quelltabellenname für eine Tabellenzuordnung, so erhält die Tabellenzuordnung standardmäßig den Namen QuelltabelleN, beginnend mit "Quelltabelle1", der jeweils um eins erhöht wird.
Sie sollten die Benennungskonvention "QuellspalteN" vermeiden, wenn Sie einen Quellspaltennamen für eine Spaltenzuordnung angeben, bzw. "QuelltabelleN", wenn Sie einen Quelltabellennamen für eine Tabellenzuordnung angeben, da der angegebene Name u. U. zu einem Konflikt mit einem standardmäßig zugewiesenen Spaltenzuordnungsnamen in ColumnMappingCollection oder einem Tabellenzuordnungsnamen in DataTableMappingCollection führen kann. Wenn der angegebene Name bereits vorhanden ist, wird eine Ausnahme ausgelöst.
Mehrere Resultsets
Wenn mit der SelectCommand-Eigenschaft mehrere Tabellen zurückgegeben werden, werden mit der Fill-Methode automatisch Tabellennamen mit sich erhöhenden Werten für die Tabellen im DataSet generiert. Der angegebene Tabellenname kommt zuerst, und die folgenden Tabellen werden nach dem Schema TabellennameN benannt, wobei mit "Tabellenname1" begonnen wird. Mit Tabellenzuordnungen können Sie die 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, folgende Fill-Methode auf.
custDA.Fill(custDS, "Customers")
Es werden zwei Tabellen im DataSet erstellt: Customers und Customers1. Mit Tabellenzuordnungen können Sie sicherstellen, dass die zweite Tabelle den Namen Orders und nicht Customers1 erhält. Dazu ordnen Sie die Quelltabelle Customers1 der DataSet-Tabelle Orders zu, wie im folgenden Beispiel gezeigt.
custDA.TableMappings.Add("Customers1", "Orders")
custDA.Fill(custDS, "Customers")
Siehe auch
Datenzugriff mit .NET Framework-Datenprovidern | DataSet-Klasse | DataTable-Klasse | DataTableCollection-Klasse | DataTableMappingCollection-Klasse | OleDbDataAdapter-Klasse | OdbcDataAdapter-Klasse | SqlDataAdapter-Klasse