Delen via


Gegevenssets vullen met TableAdapters in .NET Framework-toepassingen

Notitie

Gegevenssets en gerelateerde klassen zijn verouderde .NET Framework-technologieën uit het begin van de jaren 2000 waarmee toepassingen met gegevens in het geheugen kunnen werken terwijl de toepassingen losgekoppeld zijn van de database. De technologieën zijn vooral handig voor toepassingen waarmee gebruikers gegevens kunnen wijzigen en de wijzigingen weer kunnen behouden in de database. Hoewel gegevenssets een zeer succesvolle technologie hebben bewezen, raden we aan dat nieuwe .NET-toepassingen gebruikmaken van Entity Framework Core. Entity Framework biedt een natuurlijkere manier om met tabelgegevens te werken als objectmodellen en heeft een eenvoudigere programmeerinterface.

Een TableAdapter-onderdeel vult een gegevensset met gegevens uit de database, op basis van een of meer query's of opgeslagen procedures die u opgeeft. TableAdapters kunnen ook toevoegen, bijwerken en verwijderen uitvoeren in de database om wijzigingen die u aanbrengt in de gegevensset te behouden. Daarnaast kunt u globale opdrachten uitgeven die niet zijn gerelateerd aan een specifieke tabel.

Notitie

Visual Studio-ontwerpers genereren TableAdapters. Als u programmatisch gegevenssets maakt, gebruikt u de DataAdapter .NET-klasse.

Voor gedetailleerde informatie over TableAdapter-bewerkingen kunt u rechtstreeks naar een van deze artikelen gaan:

Artikel Beschrijving
TableAdapters maken en configureren Leer hoe je de ontwerpers gebruikt om TableAdapters te maken en configureren.
Geparameteriseerde TableAdapter-query's maken Lees hoe u gebruikers in staat stelt argumenten op te geven voor TableAdapter-procedures of -query's.
Directe toegang tot de database met een TableAdapter Meer informatie over het gebruik van de DbDirect methoden van TableAdapters.
Beperkingen uitschakelen tijdens het invullen van een gegevensset Leer hoe om te gaan met referentiesleutelbeperkingen bij het bijwerken van gegevens.
de functionaliteit van een TableAdapter- uitbreiden Meer informatie over het toevoegen van aangepaste code aan TableAdapters.
XML-gegevens lezen in een gegevensset Meer informatie over het werken met XML-gegevens in een gegevensset.

Overzicht van TableAdapter

TableAdapters zijn door de ontwerper gegenereerde onderdelen die verbinding maken met een database, query's of opgeslagen procedures uitvoeren en hun DataTable vullen met de geretourneerde gegevens. TableAdapters verzenden ook bijgewerkte gegevens van uw toepassing terug naar de database. U kunt zoveel query's uitvoeren als u wilt op een TableAdapter zolang deze gegevens retourneert die voldoen aan het schema van de bijbehorende tabel. In het volgende diagram ziet u hoe TableAdapters communiceren met databases en andere objecten in het geheugen:

Het diagram dat de gegevensstroom van TableAdapter in een clienttoepassing toont.

Hoewel TableAdapters zijn ontworpen met de Dataset Designer, worden de TableAdapter klassen niet gegenereerd als geneste klassen van DataSet. In plaats daarvan bevinden ze zich in afzonderlijke naamruimten die specifiek zijn voor elke gegevensset. Als u bijvoorbeeld een gegevensset hebt met de naam NorthwindDataSet, bevinden de TableAdapters die zijn gekoppeld aan DataTable objecten in de NorthwindDataSet zich in de NorthwindDataSetTableAdapters naamruimte. Als u programmatisch toegang wilt krijgen tot een bepaalde TableAdapter, declareert u een nieuw exemplaar van de klasse TableAdapter. Bijvoorbeeld:

NorthwindDataSet northwindDataSet = new NorthwindDataSet();

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

customersTableAdapter.Fill(northwindDataSet.Customers);

Gekoppeld gegevenstabelschema

Wanneer u een TableAdapter maakt, gebruikt u de aanvankelijke query of opgeslagen procedure om het schema van de aan de TableAdapter gekoppelde DataTablete definiëren. U voert deze eerste query of opgeslagen procedure uit door de Fill methode van TableAdapter aan te roepen, waarmee de bijbehorende DataTablevan TableAdapter wordt ingevuld. Wijzigingen die u aanbrengt in de hoofdquery van TableAdapter, worden weergegeven in het schema van de gekoppelde gegevenstabel. Als u bijvoorbeeld een kolom uit de hoofdquery verwijdert, wordt de kolom ook verwijderd uit de gekoppelde gegevenstabel. Als er extra query's op de TableAdapter worden uitgevoerd via SQL-instructies die kolommen retourneren die niet in de hoofdquery voorkomen, probeert de Dataset Designer de kolomwijzigingen tussen de hoofdquery en de extra query's te synchroniseren.

Opdrachten voor het bijwerken van TableAdapter

De updatefunctionaliteit van een TableAdapter is afhankelijk van hoeveel informatie beschikbaar is in de hoofdquery in de wizard TableAdapter. TableAdapters die zijn geconfigureerd voor het ophalen van waarden uit meerdere tabellen (met behulp van een JOIN), scalaire waarden, weergaven of de resultaten van statistische functies worden in eerste instantie niet gemaakt met de mogelijkheid om updates terug te sturen naar de onderliggende database. U kunt echter de eigenschappen InsertCommand, UpdateCommand-configureren en de eigenschappen DeleteCommand handmatig configureren in het venster Eigenschappen.

TableAdapter-query's

TableAdapters kunnen meerdere query's bevatten om de bijbehorende gegevenstabellen te vullen. U kunt zoveel query's definiëren voor een TableAdapter als uw toepassing vereist, zolang elke query gegevens retourneert die voldoen aan hetzelfde schema als de bijbehorende gegevenstabel. Met deze mogelijkheid kan een TableAdapter verschillende resultaten laden op basis van verschillende criteria.

diagram met een TableAdapter met meerdere query's.

Als uw toepassing bijvoorbeeld een tabel met klantnamen bevat, kunt u een query maken waarmee de tabel wordt gevuld met elke klantnaam die begint met een bepaalde letter. U kunt een andere query maken waarmee de tabel wordt gevuld met alle klanten die zich in dezelfde staat bevinden. Als u een Customers tabel wilt vullen met klanten met een bepaalde status, maakt u een FillByState query die als volgt een parameter voor de statuswaarde gebruikt: SELECT * FROM Customers WHERE State = @State. Voer de query uit door de methode FillByState aan te roepen en de parameterwaarde door te geven, bijvoorbeeld: CustomerTableAdapter.FillByState("WA").

Naast het toevoegen van query's die gegevens retourneren van hetzelfde schema als de gegevenstabel van TableAdapter, kunt u query's toevoegen die scalaire (enkelvoudige) waarden retourneren. Een query die bijvoorbeeld het aantal klanten (SELECT Count(*) From Customers) retourneert, is geldig voor een CustomersTableAdapter, ook al voldoen de geretourneerde gegevens niet aan het schema van de tabel.

Eigenschap ClearBeforeFill

Telkens wanneer u een query uitvoert om de gegevenstabel van een TableAdapter te vullen, worden de bestaande gegevens gewist en worden alleen de resultaten van de query in de tabel geladen. Als u de gegevens die een query retourneert aan de bestaande gegevens in een gegevenstabel wilt toevoegen of samenvoegen, stelt u de eigenschap ClearBeforeFill van TableAdapter in op false. Ongeacht of u de gegevens wist, moet u expliciet updates naar de database verzenden als u ze wilt behouden. Zorg er daarom voor dat u wijzigingen in de gegevens in de tabel opslaat voordat u een andere query uitvoert die de tabel vult. Zie Gegevens bijwerken met behulp van een TableAdapter-voor meer informatie.

TableAdapter-overname

TableAdapters breiden de functionaliteit van standaardgegevensadapters uit door een geconfigureerde DataAdapter-klasse in te kapselen. De TableAdapter neemt standaard over van de Component klasse en kan niet worden omgezet naar de DataAdapter klasse. Het casten van een TableAdapter naar de DataAdapter class leidt tot een InvalidCastException fout. Als u de basisklasse van een TableAdapter wilt wijzigen, geeft u een klasse op die is afgeleid van de Component-klasse in de eigenschap Basisklasse van de TableAdapter in de ontwerpfunctie voor gegevenssets.

TableAdapter-methoden en -eigenschappen

De TableAdapter-klasse is geen .NET-type, wat betekent dat u deze niet kunt opzoeken in de objectbrowser of referentiedocumentatie. Visual Studio maakt deze tijdens het ontwerp wanneer u een van de eerder beschreven wizards gebruikt. De naam die Visual Studio toewijst aan een TableAdapter die u maakt, is gebaseerd op de naam van de tabel waarmee u werkt. Wanneer u bijvoorbeeld een TableAdapter maakt op basis van een tabel in een database met de naam Orders, heeft de TableAdapter de naam OrdersTableAdapter. Als u de klassenaam van de TableAdapter wilt wijzigen, gebruikt u de eigenschap Name in het venster Properties van de gegevenssetontwerper.

De veelgebruikte methoden en eigenschappen van een TableAdapter zijn als volgt:

Lid Beschrijving
TableAdapter.Fill De gekoppelde gegevenstabel van TableAdapter wordt gevuld met de resultaten van de opdracht SELECT van TableAdapter.
TableAdapter.Update Hiermee worden wijzigingen teruggestuurd naar de database en wordt een geheel getal geretourneerd dat het aantal rijen aangeeft dat wordt beïnvloed door de update. Zie Gegevens bijwerken met behulp van een TableAdapter-voor meer informatie.
TableAdapter.GetData Retourneert een nieuwe DataTable gevuld met gegevens.
TableAdapter.Insert Hiermee maakt u een nieuwe rij in de gegevenstabel. Zie Nieuwe records invoegen in een databasevoor meer informatie.
TableAdapter.ClearBeforeFill Bepaalt of een gegevenstabel wordt geleegd voordat u een van de Fill methoden aanroept.

Updatemethode TableAdapter

TableAdapters gebruiken gegevensopdrachten om gegevens uit de database te lezen en te schrijven. Gebruik de eerste Fill (hoofdquery) van TableAdapter als basis voor het maken van het schema van de gekoppelde gegevenstabel, en de InsertCommand, UpdateCommanden DeleteCommand opdrachten die zijn gekoppeld aan de TableAdapter.Update methode. Wanneer u de Update methode van een TableAdapter aanroept, worden de instructies uitgevoerd die zijn gemaakt toen de TableAdapter oorspronkelijk was geconfigureerd en niet een van de extra query's die u hebt toegevoegd met de TableAdapter Query Configuration Wizard.

Wanneer u een TableAdapter gebruikt, worden dezelfde bewerkingen effectief uitgevoerd met de opdrachten die u doorgaans uitvoert. Wanneer u bijvoorbeeld de Fill methode van de adapter aanroept, voert de adapter de gegevensopdracht uit in de eigenschap SelectCommand en gebruikt een gegevenslezer (bijvoorbeeld SqlDataReader) om de resultatenset in de gegevenstabel te laden. Wanneer u de Update methode van de adapter aanroept, wordt de juiste opdracht (in de UpdateCommand, InsertCommanden DeleteCommand eigenschappen) uitgevoerd voor elke gewijzigde record in de gegevenstabel.

Notitie

Als de hoofdquery voldoende informatie bevat, maakt de ontwerpfunctie de InsertCommand, UpdateCommanden DeleteCommand opdrachten standaard wanneer de ontwerpfunctie de TableAdapter genereert. Als de hoofdquery van TableAdapter echter meer dan één tabel SELECT instructie is, kan de ontwerpfunctie deze opdrachten mogelijk niet genereren. In dat geval krijgt u mogelijk een foutmelding wanneer u de methode TableAdapter.Update uitvoert.

TableAdapter GenerateDbDirectMethods

Naast InsertCommand, UpdateCommanden DeleteCommandworden TableAdapters gemaakt met de volgende methoden die u rechtstreeks op de database kunt uitvoeren: TableAdapter.Insert, TableAdapter.Updateen TableAdapter.Delete. U kunt deze methoden rechtstreeks aanroepen om gegevens in de database te bewerken. Dit betekent dat u deze afzonderlijke methoden vanuit uw code kunt aanroepen in plaats van TableAdapter.Update aan te roepen om de invoegingen, updates en verwijderingen af te handelen die in behandeling zijn voor de gekoppelde gegevenstabel.

Als u deze directe methoden niet wilt maken, stelt u de eigenschap GenerateDbDirectMethods van de TableAdapter in op False in het venster Properties. Extra query's die aan de TableAdapter worden toegevoegd, zijn zelfstandige query's, die deze methoden niet genereren.

TableAdapter-ondersteuning voor null-typen

TableAdapters bieden ondersteuning voor null-typen Nullable<T> en T?. Voor meer informatie over nullable waardetypen in Visual Basic, zie Nullable waardetypen (Visual Basic). Zie Nulbare waardetypen (C#)voor meer informatie over nulbare typen in C#.

TableAdapterManager-referentie

Visual Studio genereert standaard een TableAdapterManager klasse wanneer u een gegevensset maakt die gerelateerde tabellen bevat. Als u wilt voorkomen dat de klasse wordt gegenereerd, wijzigt u de waarde van de eigenschap Hierarchical Update van de gegevensset in false. Wanneer u een tabel met een relatie naar het ontwerpoppervlak van een Windows Form- of WPF-pagina sleept, declareert Visual Studio een lidvariabele van de klasse. Als u geen gegevensbinding gebruikt, moet u de variabele handmatig declareren.

Omdat de klasse TableAdapterManager geen .NET-type is, wordt deze niet weergegeven in de referentiedocumentatie. Visual Studio maakt deze tijdens het ontwerpproces als onderdeel van het proces voor het maken van de gegevensset.

De volgende tabel bevat veelgebruikte methoden en eigenschappen van de klasse TableAdapterManager:

Lid Beschrijving
methode UpdateAll Hiermee worden alle gegevens uit alle gegevenstabellen opgeslagen.
eigenschap BackUpDataSetBeforeUpdate Bepaalt of een back-up van de gegevensset moet worden gemaakt voordat de TableAdapterManager.UpdateAllmethod.Booleanwordt uitgevoerd.
eigenschap tableNameTableAdapter Vertegenwoordigt een TableAdapter. De gegenereerde TableAdapterManager bevat een eigenschap voor elke TableAdapter die het beheert. Een gegevensset met een tabel Klanten en Orders wordt bijvoorbeeld gegenereerd met een TableAdapterManager die CustomersTableAdapter en OrdersTableAdapter eigenschappen bevat.
eigenschap UpdateOrder Hiermee bepaalt u de volgorde van de afzonderlijke opdrachten invoegen, bijwerken en verwijderen. Stel deze eigenschap in op een van de waarden in de opsomming TableAdapterManager.UpdateOrderOption.

De UpdateOrder is standaard ingesteld op InsertUpdateDelete, wat betekent dat invoegingen, updates en vervolgens verwijderingen worden uitgevoerd voor alle tabellen in de gegevensset.

Veiligheid

Wanneer u gegevensopdrachten gebruikt met een eigenschap CommandType ingesteld op Text, controleert u zorgvuldig de gegevens die vanaf een client worden verzonden voordat u deze doorgeeft aan uw database. Kwaadwillende gebruikers kunnen proberen gewijzigde of extra SQL-instructies te verzenden (injecteren) om onbevoegde toegang tot de database te krijgen. Voordat u gebruikersinvoer overbrengt naar een database, moet u altijd controleren of de gegevens geldig zijn. Een best practice is om waar mogelijk geparameteriseerde query's of opgeslagen procedures te gebruiken.