"DataTable" und "DataColumn"-Zuordnungen mit "DataAdapter"DataAdapter DataTable and DataColumn Mappings

Ein DataAdapter enthält eine Auflistung von 0 (NULL DataTableMapping ) oder mehr Objekten in der TableMappings -Eigenschaft.A DataAdapter contains a collection of zero or more DataTableMapping objects in its TableMappings property. Eine DataTableMapping bietet eine Master Zuordnung zwischen den Daten, die von einer Abfrage an eine Datenquelle zurückgegeben DataTablewerden, und einem.A DataTableMapping provides a master mapping between the data returned from a query against a data source, and a DataTable. Der DataTableMapping -Name kann anstelle des Namen der Daten Tabelle an die Fill -Methode von DataAdapterweitergegeben werden.The DataTableMapping name can be passed in place of the DataTable name to the Fill method of the DataAdapter. Im folgenden Beispiel wird eine DataTableMapping mit dem Namen " AuthorsMapping " für die Tabelle " Authors " erstellt.The following example creates a DataTableMapping named AuthorsMapping for the Authors table.

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

Eine DataTableMapping -Funktion ermöglicht es Ihnen, Spaltennamen in einer Daten Tabelle zu verwenden, die sich von denen in der Datenbank unterscheiden.A DataTableMapping enables you to use column names in a DataTable that are different from those in the database. Der DataAdapter verwendet die Zuordnung, um die Spalten zu vergleichen, wenn die Tabelle aktualisiert wird.The DataAdapter uses the mapping to match the columns when the table is updated.

Wenn Sie beim Aufrufen der Fill -oder Update -Methode von DataAdapterkeinen TableName -oder DataTableMapping -Namen angeben, sucht der DataAdapter nach einem DataTableMapping mit dem Namen "Table".If you do not specify a TableName or a DataTableMapping name when calling the Fill or Update method of the DataAdapter, the DataAdapter looks for a DataTableMapping named "Table". Wenn dieses DataTableMapping -Element nicht vorhanden ist, lautet der TableName der Daten Tabelle "Table".If that DataTableMapping does not exist, the TableName of the DataTable is "Table". Sie können eine DataTableMapping -Standard Zuordnung angeben, indem Sie eine DataTableMapping mit dem Namen "Table" erstellen.You can specify a default DataTableMapping by creating a DataTableMapping with the name of "Table".

Im folgenden Codebeispiel wird eine DataTableMapping (aus dem System.Data.Common -Namespace) erstellt und als Standard Zuordnung für den angegebenen DataAdapter festgelegt, indem Sie "Table" benannt wird.The following code example creates a DataTableMapping (from the System.Data.Common namespace) and makes it the default mapping for the specified DataAdapter by naming it "Table". Im Beispiel werden dann die Spalten aus der ersten Tabelle im Abfrageergebnis (die Customers -Tabelle der Northwind -Datenbank) einem Satz benutzerfreundlicher Namen in der Northwind - DataSetKunden Tabelle in zugeordnet.The example then maps the columns from the first table in the query result (the Customers table of the Northwind database) to a set of more user-friendly names in the Northwind Customers table in the DataSet. Für Spalten, die nicht zugeordnet werden, wird der Name der Spalte in der Datenquelle verwendet.For columns that are not mapped, the name of the column from the data source is used.

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 festlegen, dass der gleiche DataAdapter das Laden verschiedener Tabellen mit unterschiedlichen Zuordnungen unterstützt.In more advanced situations, you may decide that you want the same DataAdapter to support loading different tables with different mappings. Fügen Sie zu diesem Zweck einfach weitere DataTableMapping -Objekte hinzu.To do this, simply add additional DataTableMapping objects.

Wenn die Fill -Methode an eine Instanz eines DataSets und einen DataTableMapping -Namen übertragen wird, wird Sie verwendet, wenn eine Zuordnung mit diesem Namen vorhanden ist. Andernfalls wird eine Daten Tabelle mit diesem Namen verwendet.When the Fill method is passed an instance of a DataSet and a DataTableMapping name, if a mapping with that name exists it is used; otherwise, a DataTable with that name is used.

In den folgenden Beispielen wird eine DataTableMapping mit dem Namen Customers und dem Namen der Daten Tabelle BizTalkSchemaerstellt.The following examples create a DataTableMapping with a name of Customers and a DataTable name of BizTalkSchema. Im Beispiel werden dann die von der SELECT-Anweisung zurückgegebenen Zeilen der BizTalkSchema - DatenTabelle zugeordnet.The example then maps the rows returned by the SELECT statement to the 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");  

Hinweis

Wenn für eine Spaltenzuordnung kein Quellspaltenname bzw. für eine Tabellenzuordnung kein Quelltabellenname angegeben wird, werden automatisch Standardnamen generiert.If a source column name is not supplied for a column mapping or a source table name is not supplied for a table mapping, default names will be automatically generated. Wenn für eine Spalten Zuordnung keine Quell Spalte bereitgestellt wird, erhält die Spalten Zuordnung den inkrementellen Standardnamen sourcecolnumn N, beginnend mit SourceColumn1.If no source column is supplied for a column mapping, the column mapping is given an incremental default name of SourceColumn N, starting with SourceColumn1. Wenn für eine Tabellen Zuordnung kein Quell Tabellenname angegeben wird, erhält die Tabellen Zuordnung einen inkrementellen Standardnamen für SourceTable N, beginnend mit SourceTable1.If no source table name is supplied for a table mapping, the table mapping is given an incremental default name of SourceTable N, starting with SourceTable1.

Hinweis

Es wird empfohlen, dass Sie die Benennungs Konvention von sourcecolnumn N für eine Spalten Zuordnung oder SourceTable n für eine Tabellen Zuordnung vermeiden, da der von Ihnen bereitgestellte Name in Konflikt mit einem vorhandenen Standard Spalten-Zuordnungsnamen im ColumnMappingCollection oder Tabellen Zuordnung Name in DataTableMappingCollection.We recommend that you avoid the naming convention of SourceColumn N for a column mapping, or SourceTable N for a table mapping, because the name you supply may conflict with an existing default column mapping name in the ColumnMappingCollection or table mapping name in the DataTableMappingCollection. Wenn der angegebene Name bereits vorhanden ist, wird eine Ausnahme ausgelöst.If the supplied name already exists, an exception will be thrown.

Umgang mit mehreren ResultsetsHandling Multiple Result Sets

Wenn der SelectCommand mehrere Tabellen zurückgibt, generiert Fill automatisch Tabellennamen mit inkrementellen Werten für die Tabellen im DataSet, beginnend mit dem angegebenen Tabellennamen und fortsetzen in der Form TableName . N, beginnend mit TableName1.If your SelectCommand returns multiple tables, Fill automatically generates table names with incremental values for the tables in the DataSet, starting with the specified table name and continuing on in the form TableName N, starting with TableName1. Sie können Tabellen Zuordnungen verwenden, um den automatisch generierten Tabellennamen einem Namen zuzuordnen, den Sie für die Tabelle im DataSetangeben möchten.You can use table mappings to map the automatically generated table name to a name you want specified for the table in the DataSet. Geben Sie beispielsweise für einen SelectCommand , der zwei Tabellen, Kunden und Bestellungenzurückgibt, den folgenden AuffüllBefehl aus.For example, for a SelectCommand that returns two tables, Customers and Orders, issue the following call to Fill.

adapter.Fill(customersDataSet, "Customers")  

Im DataSetwerden zwei Tabellen erstellt: Kunden und Customers1.Two tables are created in the DataSet: Customers and Customers1. Sie können Tabellen Zuordnungen verwenden, um sicherzustellen, dass die zweite Tabelle den Namen Orders anstelle von Customers1hat.You can use table mappings to ensure that the second table is named Orders instead of Customers1. Ordnen Sie zu diesem Zweck die Quell Tabelle von Customers1 den DataSet -Tabellen Bestellungenzu, wie im folgenden Beispiel gezeigt.To do this, map the source table of Customers1 to the DataSet table Orders, as shown in the following example.

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

Siehe auchSee also