Dela via


Fyll i datauppsättningar med hjälp av TableAdapters i .NET Framework-program

Not

Datauppsättningar och relaterade klasser är äldre .NET Framework-tekniker från början av 2000-talet som gör det möjligt för program att arbeta med data i minnet medan programmen kopplas från databasen. Teknikerna är särskilt användbara för program som gör det möjligt för användare att ändra data och spara ändringarna tillbaka till databasen. Även om datauppsättningar har visat sig vara en mycket framgångsrik teknik rekommenderar vi att nya .NET-program använder Entity Framework Core. Entity Framework är ett mer naturligt sätt att arbeta med tabelldata som objektmodeller, och det har ett enklare programmeringsgränssnitt.

En TableAdapter-komponent fyller en datauppsättning med data från databasen, baserat på en eller flera frågor eller lagrade procedurer som du anger. TableAdapters kan också utföra tillägg, uppdateringar och borttagningar i databasen för att spara ändringar som du gör i datauppsättningen. Dessutom kan du utfärda globala kommandon som inte är relaterade till någon specifik tabell.

Notera

Visual Studio-designers skapar TableAdapters. Om du skapar datauppsättningar programmatiskt använder du klassen DataAdapter .NET.

Om du vill ha detaljerad information om TableAdapter-åtgärder kan du gå direkt till någon av dessa artiklar:

Artikel Beskrivning
Skapa och konfigurera TableAdapters Lär dig hur du använder designers för att skapa och konfigurera TableAdapters.
Skapa parametriserade TableAdapter-frågor Lär dig hur du gör det möjligt för användare att ange argument till TableAdapter-procedurer eller frågor.
Direktåtkomst till databasen med en TableAdapter- Lär dig hur du använder DbDirect-metoderna i TableAdapters.
Inaktivera begränsningar när du fyller i en datauppsättning Lär dig hur du arbetar med referensbegränsningar när du uppdaterar data.
Utöka funktionerna i en TableAdapter- Lär dig hur du lägger till anpassad kod i TableAdapters.
Läsa XML-data i en datauppsättning Lär dig hur du arbetar med XML-data i en datauppsättning.

Översikt över TableAdapter

TableAdapters är designergenererade komponenter som ansluter till en databas, kör frågor eller lagrade procedurer och fyller datatabellen med returnerade data. TableAdapters skickar även uppdaterade data från ditt program tillbaka till databasen. Du kan köra så många frågor du vill på en TableAdapter så länge den returnerar data som överensstämmer med schemat för den associerade tabellen. Följande diagram visar hur TableAdapters interagerar med databaser och andra objekt i minnet:

diagram som visar Dataflödet TableAdapter i ett klientprogram.

Även om TableAdapters är utformade med Dataset Designer, genereras inte TableAdapter-klasserna som kapslade klasser av DataSet. I stället finns de i separata namnområden som är specifika för varje datauppsättning. Om du till exempel har ett dataset med namnet NorthwindDataSet, finns TableAdapters som är associerade med DataTable-objekt inom NorthwindDataSet i namnrymden NorthwindDataSetTableAdapters. Om du vill komma åt en viss TableAdapter programmatiskt deklarerar du en ny instans av klassen TableAdapter. Till exempel:

NorthwindDataSet northwindDataSet = new NorthwindDataSet();

NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter = 
    new NorthwindDataSetTableAdapters.CustomersTableAdapter();

customersTableAdapter.Fill(northwindDataSet.Customers);

Associerat DataTable-schema

När du skapar en TableAdapter använder du den inledande frågan eller den lagrade proceduren för att definiera schemat för TableAdapter-associerade DataTable. Du kör den här inledande frågan eller den lagrade proceduren genom att anropa TableAdapter-metoden Fill, som fyller TableAdapter-associerade DataTable. Alla ändringar som du gör i TableAdapter-huvudfrågan återspeglas i schemat för den associerade datatabellen. Om du till exempel tar bort en kolumn från huvudfrågan tar Dataset Designer också bort kolumnen från den associerade datatabellen. Om ytterligare frågor i TableAdapter använder SQL-instruktioner som returnerar kolumner som inte finns i huvudfrågan, försöker Dataset Designer synkronisera kolumnändringarna mellan huvudfrågan och de ytterligare frågorna.

TableAdapter-uppdateringskommandon

Uppdateringsfunktionerna i en TableAdapter beror på hur mycket information som är tillgänglig i huvudfrågan i guiden TableAdapter. T.ex. TableAdapters som är konfigurerade för att hämta värden från flera tabeller (med hjälp av en JOIN), skalära värden, vyer eller resultatet av aggregerade funktioner skapas inte från början med möjlighet att skicka uppdateringar tillbaka till den underliggande databasen. Du kan dock konfigurera egenskaperna InsertCommand, UpdateCommandoch DeleteCommand manuellt i fönstret Egenskaper.

TableAdapter-frågor

TableAdapters kan innehålla flera frågor för att fylla sina associerade datatabeller. Du kan definiera så många frågor för en TableAdapter som programmet kräver, så länge varje fråga returnerar data som överensstämmer med samma schema som dess associerade datatabell. Med den här funktionen kan en TableAdapter läsa in olika resultat baserat på olika kriterier.

diagram som visar en TableAdapter med flera frågor.

Om ditt program till exempel innehåller en tabell med kundnamn kan du skapa en fråga som fyller tabellen med varje kundnamn som börjar med en viss bokstav. Du kan skapa en ytterligare fråga som fyller tabellen med alla kunder som finns i samma delstat. Om du vill fylla i en Customers tabell med kunder i ett visst tillstånd skapar du en FillByState fråga som tar en parameter för tillståndsvärdet enligt följande: SELECT * FROM Customers WHERE State = @State. Kör frågan genom att anropa metoden FillByState och skicka parametervärdet, till exempel: CustomerTableAdapter.FillByState("WA").

Förutom att lägga till frågor som returnerar data i samma schema som TableAdapter-datatabellen kan du lägga till frågor som returnerar skalära (enkla) värden. Till exempel är en fråga som returnerar antalet kunder (SELECT Count(*) From Customers) giltig för en CustomersTableAdapter, även om de returnerade data inte överensstämmer med tabellens schema.

Egenskapen ClearBeforeFill

Som standard rensas befintliga data varje gång du kör en fråga för att fylla i en TableAdapter-datatabell och endast resultatet av frågan läses in i tabellen. Om du vill lägga till eller sammanfoga data som en fråga returnerar till befintliga data i en datatabell anger du egenskapen TableAdapter ClearBeforeFill till false. Oavsett om du rensar data måste du uttryckligen skicka uppdateringar tillbaka till databasen om du vill spara dem. Se därför till att du sparar alla ändringar i data i tabellen innan du kör en annan fråga som fyller tabellen. Mer information finns i Uppdatera data med hjälp av en TableAdapter-.

TabellAdapter-arv

TableAdapters utökar funktionerna i standarddatakort genom att kapsla in en konfigurerad DataAdapter-klass. TableAdapter ärver som standard från klassen Component och kan inte överföras till klassen DataAdapter. Om du kastar om en TableAdapter till DataAdapter-klassen resulterar det i ett InvalidCastException-fel. Om du vill ändra basklassen för en TableAdapter anger du en klass som härleds från klassen Component i egenskapen Base Class för TableAdapter i Dataset Designer.

TableAdapter-metoder och egenskaper

Klassen TableAdapter är inte en .NET-typ, vilket innebär att du inte kan söka efter den i objektläsaren eller referensdokumentationen. Visual Studio skapar den under designfasen när du använder någon av de guider som beskrevs tidigare. Namnet som Visual Studio tilldelar till en TableAdapter som du skapar baseras på namnet på den tabell som du arbetar med. När du till exempel skapar en TableAdapter baserat på en tabell i en databas med namnet Ordersfår TableAdapter namnet OrdersTableAdapter. Om du vill ändra klassnamnet för TableAdapter använder du egenskapen Name i datauppsättningsdesignerns fönster Egenskaper.

De metoder och egenskaper som används ofta för en TableAdapter är följande:

Medlem Beskrivning
TableAdapter.Fill Fyller i TableAdapter-associerade datatabellen med resultatet av TableAdapter-kommandot SELECT.
TableAdapter.Update Skickar tillbaka ändringar till databasen och returnerar ett heltal som representerar antalet rader som påverkas av uppdateringen. För mer information, se Uppdatera data med hjälp av en TableAdapter.
TableAdapter.GetData Returnerar en ny DataTable fylld med data.
TableAdapter.Insert Skapar en ny rad i datatabellen. Mer information finns i Infoga nya poster i en databas.
TableAdapter.ClearBeforeFill Avgör om en datatabell töms innan du anropar någon av de Fill metoderna.

TableAdapter-uppdateringsmetod

TableAdapters använder datakommandon för att läsa till och skriva från databasen. Använd TableAdapter:ns initiala Fill (huvud)fråga som grund för att skapa schemat för den associerade datatabellen, och kommandona InsertCommand, UpdateCommandoch DeleteCommand som är associerade med metoden TableAdapter.Update. När du anropar en TableAdapter-Update-metod körs de instruktioner som skapades när TableAdapter ursprungligen konfigurerades, och inte någon av de extra frågor som du lade till med TableAdapter-frågekonfigurationsguiden.

När du använder en TableAdapter utför den effektivt samma åtgärder med de kommandon som du vanligtvis utför. När du till exempel anropar adapterns Fill-metod kör adaptern datakommandot i egenskapen SelectCommand och använder en dataläsare (till exempel SqlDataReader) för att läsa in resultatuppsättningen i datatabellen. När du anropar adapterns Update-metod kör den på samma sätt lämpligt kommando (i egenskaperna UpdateCommand, InsertCommandoch DeleteCommand) för varje ändrad post i datatabellen.

Not

Om huvudfrågan innehåller tillräckligt med information skapar designern kommandona InsertCommand, UpdateCommandoch DeleteCommand som standard när designern genererar TableAdapter. Men om TableAdapter-huvudfrågan är mer än en enda tabell SELECT-instruktion kanske designern inte kan generera dessa kommandon. I så fall kan du få ett fel när du kör metoden TableAdapter.Update.

TableAdapter GenerateDbDirectMethods

Förutom InsertCommand, UpdateCommandoch DeleteCommandskapas TableAdapters med följande metoder som du kan köra direkt mot databasen: TableAdapter.Insert, TableAdapter.Updateoch TableAdapter.Delete. Du kan anropa dessa metoder direkt för att manipulera data i databasen. Det innebär att du kan anropa dessa enskilda metoder från koden i stället för att anropa TableAdapter.Update för att hantera de infogningar, uppdateringar och borttagningar som väntar på den associerade datatabellen.

Om du inte vill skapa dessa direktmetoder, anger du egenskapen GenerateDbDirectMethods till False i fönstret Egenskaper. Extra frågor som läggs till i TableAdapter är fristående frågor som inte genererar dessa metoder.

TableAdapter-stöd för nullbara typer

TableAdapters stöder null-typer Nullable<T> och T?. Mer information om null-typer i Visual Basic finns i Nullable value types (Visual Basic). Mer information om null-typer i C# finns i Nullable value types (C#).

TableAdapterManager-referens

Visual Studio genererar som standard en TableAdapterManager-klass när du skapar en datauppsättning som innehåller relaterade tabeller. Om du vill förhindra att klassen genereras ändrar du värdet för Hierarchical Update-egenskapen för datauppsättningen till false. När du drar en tabell som har en relation till designytan på en Windows-formulär- eller WPF-sida deklarerar Visual Studio en medlemsvariabel för klassen. Om du inte använder databindning måste du deklarera variabeln manuellt.

Eftersom klassen TableAdapterManager inte är en .NET-typ visas den inte i referensdokumentationen. Visual Studio skapar den vid designtillfället som en del av processen för att skapa datauppsättningar.

I följande tabell visas metoder och egenskaper som används ofta för klassen TableAdapterManager:

Medlem Beskrivning
UpdateAll-metoden Sparar alla data från alla datatabeller.
BackUpDataSetBeforeUpdate egenskap Avgör om du vill skapa en säkerhetskopia av datamängden innan du kör TableAdapterManager.UpdateAllmethod.Boolean.
egenskapen för tabellnamnet TableAdapter Representerar en TableAdapter. Den genererade TableAdapterManager innehåller en egenskap för varje TableAdapter den hanterar. Till exempel genereras en datauppsättning med tabellerna Kunder och Beställningar tillsammans med en TableAdapterManager som innehåller egenskaperna CustomersTableAdapter och OrdersTableAdapter.
UpdateOrder egenskap Styr ordningen på de enskilda kommandona för att infoga, uppdatera och ta bort. Ange den här egenskapen till ett av värdena i TableAdapterManager.UpdateOrderOption uppräkning.

Som standard är UpdateOrder inställt på InsertUpdateDelete, vilket innebär att infogningar, uppdateringar och sedan borttagningar utförs för alla tabeller i datauppsättningen.

Säkerhet

När du använder datakommandon med en CommandType egenskap inställd på Textkontrollerar du noggrant informationen som skickas från en klient innan du skickar den till databasen. Skadliga användare kan försöka skicka (mata in) ändrade eller extra SQL-instruktioner för att få obehörig åtkomst till databasen. Innan du överför användarindata till en databas kontrollerar du alltid att informationen är giltig. Bästa praxis är att använda parametriserade frågor eller lagrade procedurer när det är möjligt.