Mapping di DataAdapter, DataTable e DataColumnDataAdapter DataTable and DataColumn Mappings

Un DataAdapter contiene una raccolta di zero o più DataTableMapping oggetti nella relativa proprietà TableMappings .A DataAdapter contains a collection of zero or more DataTableMapping objects in its TableMappings property. Un DataTableMapping fornisce un mapping master tra i dati restituiti da una query su un'origine dati e un oggetto DataTable.A DataTableMapping provides a master mapping between the data returned from a query against a data source, and a DataTable. Il nome di DataTableMapping può essere passato al posto del nome della DataTable al metodo Fill di DataAdapter.The DataTableMapping name can be passed in place of the DataTable name to the Fill method of the DataAdapter. Nell'esempio seguente viene creato un DataTableMapping denominato AuthorsMapping per la tabella 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 consente di utilizzare nomi di colonna in un oggetto DataTable diversi da quelli presenti nel database.A DataTableMapping enables you to use column names in a DataTable that are different from those in the database. DataAdapter utilizza il mapping per trovare la corrispondenza con le colonne quando viene aggiornata la tabella.The DataAdapter uses the mapping to match the columns when the table is updated.

Se non si specifica un nome di tabella o di DataTableMapping quando si chiama il metodo Fill o Update di DataAdapter, DataAdapter Cerca un DataTableMapping denominato "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". Se DataTableMapping non esiste, il TableName della DataTable è "Table".If that DataTableMapping does not exist, the TableName of the DataTable is "Table". È possibile specificare un DataTableMapping predefinito creando un DataTableMapping con il nome "Table".You can specify a default DataTableMapping by creating a DataTableMapping with the name of "Table".

Nell'esempio di codice seguente viene creato un oggetto DataTableMapping System.Data.Common (dallo spazio dei nomi) e il mapping predefinito per l'oggetto DataAdapter specificato viene denominato "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". Nell'esempio viene quindi eseguito il mapping delle colonne della prima tabella nel risultato della query, ovvero la tabella Customers del database Northwind , a un set di nomi descrittivi nella tabella DataSet Northwind Customers del.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. Per le colonne di cui non viene eseguito il mapping, viene usato il nome della colonna nell'origine dati.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 situazioni più avanzate, è possibile che si desideri che lo stesso DataAdapter supporti il caricamento di tabelle diverse con mapping diversi.In more advanced situations, you may decide that you want the same DataAdapter to support loading different tables with different mappings. A tale scopo, è sufficiente aggiungere altri oggetti DataTableMapping .To do this, simply add additional DataTableMapping objects.

Quando al metodo Fill viene passata un'istanza di un set di dati e un nome di DataTableMapping , se esiste un mapping con tale nome, viene utilizzato. in caso contrario, viene usato un oggetto DataTable con tale nome.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.

Negli esempi seguenti viene creato un DataTableMapping con il nome Customers e il nome DataTable BizTalkSchema.The following examples create a DataTableMapping with a name of Customers and a DataTable name of BizTalkSchema. Nell'esempio viene quindi eseguito il mapping delle righe restituite dall'istruzione SELECT alla 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");  

Nota

Se non viene indicato il nome della colonna di origine per il mapping di una colonna o il nome della tabella di origine per il mapping di una tabella, vengono generati automaticamente nomi predefiniti.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. Se per un mapping di colonna non viene fornita alcuna colonna di origine, al mapping delle colonne viene assegnato il nome predefinito incrementale SourceColumn N, a partire da 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. Se non viene fornito alcun nome di tabella di origine per un mapping di tabella, al mapping della tabella viene assegnato il nome predefinito incrementale SourceTable N, a partire da 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.

Nota

Si consiglia di evitare la convenzione di denominazione di SourceColumn n per un mapping di colonna o di SourceTable n per un mapping di tabella, perché il nome fornito potrebbe entrare in conflitto con un nome di mapping di colonna predefinito esistente nel ColumnMappingCollection o nome del mapping di tabella 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. Se il nome specificato esiste già, verrà generata un'eccezione.If the supplied name already exists, an exception will be thrown.

Gestione di più set di risultatiHandling Multiple Result Sets

Se SelectCommand restituisce più tabelle, Fill genera automaticamente i nomi di tabella con valori incrementali per le tabelle nel set di dati, iniziando con il nome della tabella specificato e continuando nel formato TableName N, a partire da 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. È possibile utilizzare i mapping di tabella per eseguire il mapping del nome di tabella generato automaticamente a un nome che si desidera specificare per la tabella nel set di dati.You can use table mappings to map the automatically generated table name to a name you want specified for the table in the DataSet. Ad esempio, per un SelectCommand che restituisce due tabelle, Customers e Orders, eseguire la chiamata seguente a Fill.For example, for a SelectCommand that returns two tables, Customers and Orders, issue the following call to Fill.

adapter.Fill(customersDataSet, "Customers")  

Nel set di dativengono create due tabelle: Customers e Customers1.Two tables are created in the DataSet: Customers and Customers1. È possibile utilizzare i mapping delle tabelle per assicurarsi che la seconda tabella sia denominata Orders anziché Customers1.You can use table mappings to ensure that the second table is named Orders instead of Customers1. A tale scopo, eseguire il mapping della tabella di origine di Customers1 agli ordinidella tabella del set di dati , come illustrato nell'esempio seguente.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")  

Vedere ancheSee also