Dela via


DataAdapter DataTable- och DataColumn-mappningar

En DataAdapter innehåller en samling med noll eller fler DataTableMapping objekt i egenskapen TableMappings . En DataTableMapping tillhandahåller en primär mappning mellan data som returneras från en fråga mot en datakälla och en DataTable. DataTableMapping-namnet kan skickas i stället för DataTable-namnet till fyllningsmetoden för DataAdapter. I följande exempel skapas en DataTableMapping med namnet AuthorsMapping för tabellen Författare .

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

Med En DataTableMapping kan du använda kolumnnamn i en DataTable som skiljer sig från dem i databasen. DataAdapter använder mappningen för att matcha kolumnerna när tabellen uppdateras.

Om du inte anger ett TableName- eller DataTableMapping-namnnär du anropar metoden Fyll eller Uppdatera för DataAdapter letar DataAdapter efter en DataTableMapping med namnet "Table". Om DataTableMapping inte finns är TableName för DataTable "Table". Du kan ange en standarddatatabellmappning genom att skapa en DataTableMapping med namnet "Table".

I följande kodexempel skapas en DataTableMapping (från System.Data.Common namnområdet) och gör den till standardmappning för den angivna DataAdapter genom att namnge den "Tabell". Exemplet mappar sedan kolumnerna från den första tabellen i frågeresultatet ( tabellen Kunder i Northwind-databasen ) till en uppsättning mer användarvänliga namn i tabellen Northwind-kunder i DataSet. För kolumner som inte mappas används namnet på kolumnen från datakällan.

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);  

I mer avancerade situationer kan du bestämma dig för att du vill att samma DataAdapter ska ha stöd för inläsning av olika tabeller med olika mappningar. Det gör du genom att lägga till ytterligare DataTableMapping-objekt .

När fyllningsmetoden skickas används en instans av en DataSet och ett DataTableMapping-namn, om det finns en mappning med det namnet. Annars används en DataTable med det namnet.

I följande exempel skapas en DataTableMapping med namnet Kunder och ett DataTable-namnBizTalkSchema. Exemplet mappar sedan de rader som returneras av SELECT-instruktionen till BizTalkSchemaDataTable.

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");  

Kommentar

Om ett källkolumnnamn inte anges för en kolumnmappning eller om ett källtabellnamn inte anges för en tabellmappning genereras standardnamn automatiskt. Om ingen källkolumn anges för en kolumnmappning får kolumnmappningen ett inkrementellt standardnamn för SourceColumnN, från och med SourceColumn1. Om inget källtabellnamn anges för en tabellmappning får tabellmappningen ett inkrementellt standardnamn för SourceTableN, från och med SourceTable1.

Kommentar

Vi rekommenderar att du undviker namngivningskonventionen för SourceColumnN för en kolumnmappning, eller SourceTableN för en tabellmappning, eftersom namnet du anger kan vara i konflikt med ett befintligt standardnamn för kolumnmappning i ColumnMappingCollection eller tabellmappningsnamnet i DataTableMappingCollection. Om det angivna namnet redan finns genereras ett undantag.

Hantera flera resultatuppsättningar

Om SelectCommand returnerar flera tabeller genererar Fill automatiskt tabellnamn med inkrementella värden för tabellerna i DataSet, från och med det angivna tabellnamnet och fortsätter i formuläret TableNameN, med början i TableName1. Du kan använda tabellmappningar för att mappa det automatiskt genererade tabellnamnet till ett namn som du vill ange för tabellen i DataSet. För en SelectCommand som returnerar två tabeller, Kunder och Beställningar, utfärdar du till exempel följande anrop till Fyll.

adapter.Fill(customersDataSet, "Customers")  
adapter.Fill(customersDataSet, "Customers");  

Två tabeller skapas i DataSet: Kunder och Kunder1. Du kan använda tabellmappningar för att se till att den andra tabellen heter Beställningar i stället för Kunder1. Det gör du genom att mappa källtabellen för Customers1 till DataSet-tabellenBeställningar, som du ser i följande exempel.

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

Se även