Dela via


Lägga till befintliga begränsningar i en datauppsättning

Fyllningsmetoden för DataAdapter fyller DataSet endast med tabellkolumner och rader från en datakälla. Även om begränsningar ofta anges av datakällan lägger metoden Fill inte till den här schemainformationen i DataSet som standard. Om du vill fylla i en DataSet med befintlig primärnyckelbegränsningsinformation från en datakälla kan du antingen anropa Metoden FillSchema för DataAdapter eller ange egenskapen MissingSchemaAction för DataAdapter till AddWithKey innan du anropar Fill. Detta säkerställer att primärnyckelbegränsningarna i DataSet återspeglar dem i datakällan. Villkorsinformation för sekundärnyckel ingår inte och måste skapas uttryckligen, som visas i DataTable-begränsningar.

Om du lägger till schemainformation i en DataSet innan du fyller den med data säkerställer du att primära nyckelbegränsningar ingår i objekten DataTablei DataSet. När ytterligare anrop för att fylla DataSet görs används därför primärnyckelkolumninformationen för att matcha nya rader från datakällan med aktuella rader i varje DataTable, och aktuella data i tabellerna skrivs över med data från datakällan. Utan schemainformation läggs de nya raderna från datakällan till i DataSet, vilket resulterar i dubbletter av rader.

Kommentar

Om en kolumn i en datakälla identifieras som automatisk inkrementell skapas en DataColumn med egenskapen AutoIncrement inställd på .true Du måste dock ange värdena AutoIncrementStep och AutoIncrementSeed själv. Mer information om automatisk inkrementella kolumner finns i Skapa autoinkrementskolumner.

Om du använder FillSchema eller anger MissingSchemaAction till AddWithKey krävs extra bearbetning i datakällan för att fastställa primärnyckelkolumninformation. Den här ytterligare bearbetningen kan hindra prestanda. Om du känner till primärnyckelinformationen vid designtillfället rekommenderar vi att du uttryckligen anger primärnyckelkolumnen eller kolumnerna för att uppnå optimala prestanda. Information om hur du uttryckligen anger primärnyckelinformation för en tabell finns i Definiera primära nycklar.

I följande kodexempel visas hur du lägger till schemainformation i en DataSet med hjälp av FillSchema:

Dim custDataSet As New DataSet()  
  
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers")  
custAdapter.Fill(custDataSet, "Customers")  
var custDataSet = new DataSet();  
  
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers");  
custAdapter.Fill(custDataSet, "Customers");  

Följande kodexempel visar hur du lägger till schemainformation i en DataSet med egenskapen MissingSchemaAction.AddWithKey för fyllningsmetoden :

Dim custDataSet As New DataSet()  
  
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey  
custAdapter.Fill(custDataSet, "Customers")  
var custDataSet = new DataSet();  
  
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;  
custAdapter.Fill(custDataSet, "Customers");  

Hantera flera resultatuppsättningar

Om DataAdapter stöter på flera resultatuppsättningar som returneras från SelectCommand skapas flera tabeller i DataSet. Tabellerna får ett nollbaserat inkrementellt standardnamn för TabellN, som börjar med Tabell i stället för "Table0". Om ett tabellnamn skickas som ett argument till metoden FillSchema får tabellerna ett nollbaserat inkrementellt namn på TableNameN, som börjar med TableName i stället för "TableName0".

Kommentar

Om FillSchema-metodenför OleDbDataAdapter-objektet anropas för ett kommando som returnerar flera resultatuppsättningar returneras endast schemainformationen från den första resultatuppsättningen. När du returnerar schemainformation för flera resultatuppsättningar med hjälp av OleDbDataAdapter rekommenderar vi att du anger en MissingSchemaAction för AddWithKey och hämtar schemainformationen när du anropar fyllningsmetoden .

Se även