Mappages de DataAdapter DataTable et DataColumnDataAdapter DataTable and DataColumn Mappings

Un DataAdapter contient une collection de zéro ou plusieurs DataTableMapping objets dans sa propriété TableMappings .A DataAdapter contains a collection of zero or more DataTableMapping objects in its TableMappings property. Un DataTableMapping fournit un mappage principal entre les données retournées par une requête sur une source de données DataTableet un.A DataTableMapping provides a master mapping between the data returned from a query against a data source, and a DataTable. Le nom DataTableMapping peut être passé à la place du nom du DataTable à la méthode Fill du DataAdapter.The DataTableMapping name can be passed in place of the DataTable name to the Fill method of the DataAdapter. L’exemple suivant crée un DataTableMapping nommé AuthorsMapping pour la table Authors .The following example creates a DataTableMapping named AuthorsMapping for the Authors table.

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

Un DataTableMapping vous permet d’utiliser des noms de colonnes dans un DataTable qui sont différents de ceux de la base de données.A DataTableMapping enables you to use column names in a DataTable that are different from those in the database. Le DataAdapter utilise le mappage pour faire correspondre les colonnes lorsque la table est mise à jour.The DataAdapter uses the mapping to match the columns when the table is updated.

Si vous ne spécifiez pas de nom TableName ou DataTableMapping lors de l’appel de la méthode Fill ou Update du DataAdapter, le DataAdapter recherche un DataTableMapping nommé « 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". Si ce DataTableMapping n’existe pas, le TableName du DataTable est « table ».If that DataTableMapping does not exist, the TableName of the DataTable is "Table". Vous pouvez spécifier un DataTableMapping par défaut en créant un DataTableMapping portant le nom « table ».You can specify a default DataTableMapping by creating a DataTableMapping with the name of "Table".

L’exemple de code suivant crée un DataTableMappingSystem.Data.Common partir de l’espace de noms) et en fait le mappage par défaut pour le DataAdapter spécifié en le nommant « table ».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". L’exemple mappe ensuite les colonnes de la première table du résultat de la requête (la table Customers de la base de données Northwind ) à un ensemble de noms plus conviviaux dans la table Customers de Northwind dans le DataSet.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. Pour les colonnes qui ne sont pas mappées, le nom de la colonne de la source de données est utilisé.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);  

Dans les situations plus avancées, vous pouvez décider que vous souhaitez que le même DataAdapter prenne en charge le chargement de différentes tables avec des mappages différents.In more advanced situations, you may decide that you want the same DataAdapter to support loading different tables with different mappings. Pour ce faire, ajoutez simplement des objets DataTableMapping supplémentaires.To do this, simply add additional DataTableMapping objects.

Quand la méthode Fill reçoit une instance d’un DataSet et un nom DataTableMapping , si un mappage portant ce nom existe, il est utilisé ; dans le cas contraire, un DataTable portant ce nom est utilisé.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.

Les exemples suivants créent un DataTableMapping avec un nom Customers et un nom DataTable BizTalkSchema.The following examples create a DataTableMapping with a name of Customers and a DataTable name of BizTalkSchema. L’exemple mappe ensuite les lignes retournées par l’instruction SELECT au DataTable BizTalkSchema .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");  

Notes

Si aucun nom de colonne source n'est fourni pour un mappage de colonne ou aucun nom de table source n'est fourni pour un mappage de table, les noms par défaut sont automatiquement générés.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. Si aucune colonne source n’est fournie pour un mappage de colonnes, le mappage de colonnes reçoit un nom incrémentiel par défaut de SourceColumn N, en commençant par 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. Si aucun nom de table source n’est fourni pour un mappage de table, le mappage de table reçoit un nom incrémentiel par défaut de SourceTable N, en commençant par 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.

Notes

Nous vous recommandons d’éviter la Convention d’affectation de noms de SourceColumn n pour un mappage de colonnes, ou SourceTable n pour un mappage de table, car le nom que vous fournissez peut être en conflit avec un nom de mappage de colonne par défaut existant dans le ColumnMappingCollection ou nom du mappage de table dans le 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. Si le nom fourni existe déjà, une exception sera levée.If the supplied name already exists, an exception will be thrown.

Gestion de jeux de résultats multiplesHandling Multiple Result Sets

Si votre SelectCommand retourne plusieurs tables, Fill génère automatiquement des noms de table avec des valeurs incrémentielles pour les tables du DataSet, en commençant par le nom de table spécifié et en continuant sous la forme TableName N, commençant par 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. Vous pouvez utiliser des mappages de table pour mapper le nom de table généré automatiquement à un nom que vous souhaitez spécifier pour la table dans le jeu de données.You can use table mappings to map the automatically generated table name to a name you want specified for the table in the DataSet. Par exemple, pour un SelectCommand qui retourne deux tables, Customers et Orders, émettez l’appel suivant à Fill.For example, for a SelectCommand that returns two tables, Customers and Orders, issue the following call to Fill.

adapter.Fill(customersDataSet, "Customers")  

Deux tables sont créées dans le jeu de données: Clients et Customers1.Two tables are created in the DataSet: Customers and Customers1. Vous pouvez utiliser des mappages de table pour vous assurer que la deuxième table est nommée Orders au lieu de Customers1.You can use table mappings to ensure that the second table is named Orders instead of Customers1. Pour ce faire, mappez la table source de Customers1 à la table Ordersdu DataSet , comme indiqué dans l’exemple suivant.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")  

Voir aussiSee also