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-namn nä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-namn på BizTalkSchema. Exemplet mappar sedan de rader som returneras av SELECT-instruktionen till 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");
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 SourceColumn N, från och med SourceColumn1. Om inget källtabellnamn anges för en tabellmappning får tabellmappningen ett inkrementellt standardnamn för SourceTable N, från och med SourceTable1.
Kommentar
Vi rekommenderar att du undviker namngivningskonventionen för SourceColumn N för en kolumnmappning, eller SourceTable N 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 TableName N, 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-tabellen Bestä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");