Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
De DataSet klassen 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 apps losgekoppeld zijn van de database. De technologieën zijn vooral handig voor apps waarmee gebruikers gegevens kunnen wijzigen en de wijzigingen weer kunnen behouden in de database. Hoewel gegevenssets een bewezen succesvolle technologie zijn, is de aanbevolen aanpak voor nieuwe .NET-toepassingen het gebruik van Entity Framework Core. Entity Framework biedt een natuurlijkere manier om met tabelgegevens te werken als objectmodellen en heeft een eenvoudigere programmeerinterface.
De gegevensset is een in-memory kopie van gegevens. Als u die gegevens wijzigt, is het een goed idee om deze wijzigingen weer op te slaan in de database. U doet dit op drie manieren:
Door een van de
Updatemethoden van een TableAdapter aan te roepenDoor een van de methoden van
DBDirectde TableAdapter aan te roepenDoor de
UpdateAllmethode op de TableAdapterManager aan te roepen die Visual Studio voor u genereert wanneer de gegevensset tabellen bevat die zijn gerelateerd aan andere tabellen in de gegevensset
Wanneer u gegevenssettabellen koppelt aan besturingselementen op een Windows-formulier of XAML-pagina, doet de architectuur voor gegevensbinding al het werk voor u.
Als u bekend bent met TableAdapters, kunt u rechtstreeks naar een van deze onderwerpen gaan:
| Onderwerp | Beschrijving |
|---|---|
| Nieuwe records invoegen in een database | Alles over updates en inserts uitvoeren met TableAdapters of Command-objecten |
| Gegevens bijwerken met behulp van een TableAdapter | Updates uitvoeren met TableAdapters |
| hiërarchische update | Updates uitvoeren vanuit een gegevensset met twee of meer gerelateerde tabellen |
| Een concurrentie-uitzondering afhandelen | Uitzonderingen afhandelen wanneer twee gebruikers tegelijkertijd dezelfde gegevens in een database proberen te wijzigen |
| Procedure: Gegevens opslaan met behulp van een transactie | Gegevens opslaan in een transactie met behulp van het systeem. Naamruimte van transacties en een TransactionScope-object |
| Gegevens opslaan in een transactie | Stapsgewijze instructies voor het maken van een Windows Forms-toepassing om gegevens op te slaan in een database binnen een transactie |
| Gegevens opslaan in een database (meerdere tabellen) | Records bewerken en wijzigingen opslaan in meerdere tabellen terug naar de database |
| Gegevens van een object opslaan in een database | Gegevens doorgeven van een object dat zich niet in een gegevensset bevindt aan een database met behulp van een TableAdapter DbDirect-methode |
| Gegevens opslaan met de TableAdapter DBDirect-methoden | De TableAdapter gebruiken om SQL-query's rechtstreeks naar de database te verzenden |
| Een gegevensset opslaan als XML | Een gegevensset opslaan in een XML-document |
Updates in twee fasen
Het bijwerken van een gegevensbron is een proces in twee stappen. De eerste stap bestaat uit het bijwerken van de gegevensset met nieuwe records, gewijzigde records of verwijderde records. Als uw toepassing deze wijzigingen nooit terugstuurt naar de gegevensbron, bent u klaar met de update.
Als u de wijzigingen terugstuurt naar de database, is een tweede stap vereist. Als u geen gegevensgebonden besturingselementen gebruikt, moet u handmatig de Update methode aanroepen van dezelfde TableAdapter (of gegevensadapter) die u hebt gebruikt om de gegevensset te vullen. U kunt echter ook verschillende adapters gebruiken, bijvoorbeeld om gegevens van de ene gegevensbron naar de andere te verplaatsen of om meerdere gegevensbronnen bij te werken. Als u geen gegevensbinding gebruikt en wijzigingen voor gerelateerde tabellen opslaat, moet u handmatig een variabele van de automatisch gegenereerde TableAdapterManager klasse instantiëren en vervolgens de UpdateAll methode aanroepen.
Een gegevensset bevat verzamelingen tabellen, die een verzameling rijen bevatten. Als u later een onderliggende gegevensbron wilt bijwerken, moet u de methoden in de DataTable.DataRowCollection eigenschap gebruiken bij het toevoegen of verwijderen van rijen. Deze methoden voeren het bijhouden van wijzigingen uit die nodig zijn voor het bijwerken van de gegevensbron. Als u de RemoveAt verzameling aanroept op de eigenschap Rows, wordt de verwijdering niet teruggegeven aan de database.
Gegevenssets samenvoegen
U kunt de inhoud van een gegevensset bijwerken door deze samen te voegen met een andere gegevensset. Dit omvat het kopiëren van de inhoud van een brongegevensset naar de aanroepende gegevensset (aangeduid als de doelgegevensset ). Wanneer u gegevenssets samenvoegt, worden nieuwe records in de brongegevensset toegevoegd aan de doelgegevensset. Daarnaast worden extra kolommen in de brongegevensset toegevoegd aan de doelgegevensset. Het samenvoegen van gegevenssets is handig wanneer u een lokale gegevensset hebt en u een tweede gegevensset uit een andere toepassing krijgt. Het is ook handig wanneer u een tweede gegevensset krijgt van een onderdeel, zoals een XML-webservice, of wanneer u gegevens uit meerdere gegevenssets moet integreren.
Wanneer u gegevenssets samenvoegt, kunt u een Booleaanse argument (preserveChanges) doorgeven waarmee de Merge methode wordt aangegeven of bestaande wijzigingen in de doelgegevensset moeten worden bewaard. Omdat gegevenssets meerdere versies van records onderhouden, is het belangrijk om er rekening mee te houden dat meer dan één versie van de records wordt samengevoegd. In de volgende tabel ziet u hoe een record in twee gegevenssets wordt samengevoegd:
| DataRowVersion | Doelgegevensset | Brongegevensset |
|---|---|---|
| Originele Tekst | James Wilson | James C. Wilson |
| Actueel | Jim Wilson | James C. Wilson |
De methode Merge aanroepen op de vorige tabel met preserveChanges=false targetDataset.Merge(sourceDataset) levert de volgende gegevens op:
| DataRowVersion | Doelgegevensset | Brongegevensset |
|---|---|---|
| Originele Tekst | James C. Wilson | James C. Wilson |
| Actueel | James C. Wilson | James C. Wilson |
Merge Aanroepen van de methode met preserveChanges = true targetDataset.Merge(sourceDataset, true) levert de volgende gegevens op:
| DataRowVersion | Doelgegevensset | Brongegevensset |
|---|---|---|
| Originele Tekst | James C. Wilson | James C. Wilson |
| Actueel | Jim Wilson | James C. Wilson |
Waarschuwing
Als in het preserveChanges = true scenario de RejectChanges methode wordt aangeroepen op een record in de doelgegevensset, wordt deze teruggezet naar de oorspronkelijke gegevens uit de brongegevensset . Dit betekent dat als u de oorspronkelijke gegevensbron probeert bij te werken met de doelgegevensset, de oorspronkelijke rij mogelijk niet kan vinden om bij te werken. U kunt een schending van gelijktijdigheid voorkomen door een andere gegevensset met de bijgewerkte records uit de gegevensbron in te vullen en vervolgens een samenvoeging uit te voeren om een schending van gelijktijdigheid te voorkomen. (Een schending van gelijktijdigheid treedt op wanneer een andere gebruiker een record in de gegevensbron wijzigt nadat de gegevensset is ingevuld.)
Beperkingen bijwerken
Als u wijzigingen wilt aanbrengen in een bestaande gegevensrij, voegt u gegevens toe of werkt u deze bij in de afzonderlijke kolommen. Als de gegevensset beperkingen bevat (zoals vreemde sleutels of niet-NULL-beperkingen), is het mogelijk dat de record tijdelijk een foutstatus heeft wanneer u deze bijwerkt. Dat wil gezegd, het kan een foutstatus hebben nadat u klaar bent met het bijwerken van één kolom, maar voordat u bij de volgende kolom komt.
Als u schendingen van voortijdige beperkingen wilt voorkomen, kunt u updatebeperkingen tijdelijk onderbreken. Dit dient twee doeleinden:
Er wordt voorkomen dat er een fout wordt gegenereerd nadat u klaar bent met het bijwerken van een kolom, maar nog niet bent begonnen met het bijwerken van een andere kolom.
Het voorkomt dat bepaalde updategebeurtenissen worden gegenereerd (gebeurtenissen die vaak worden gebruikt voor validatie).
Opmerking
In Windows Forms wordt met de architectuur voor gegevensbinding die is ingebouwd in de datagrid de controle van beperkingen onderbroken totdat de focus uit een rij wordt verplaatst en u niet expliciet de BeginEdit, EndEditof CancelEdit methoden hoeft aan te roepen.
Beperkingen worden automatisch uitgeschakeld wanneer de Merge methode wordt aangeroepen op een gegevensset. Wanneer de samenvoeging is voltooid, wordt er een ConstraintException gegenereerd als er beperkingen op de gegevensset zijn die niet kunnen worden ingeschakeld. In deze situatie is de EnforceConstraints eigenschap ingesteld op false, en alle schendingen van beperkingen moeten worden opgelost voordat u de EnforceConstraints eigenschap trueopnieuw instelt op .
Nadat u een update hebt voltooid, kunt u de beperkingscontrole opnieuw inschakelen, waardoor ook update-gebeurtenissen opnieuw kunnen worden geactiveerd en veroorzaakt.
Zie Beperkingen uitschakelen tijdens het invullen van een gegevensset voor meer informatie over het onderbreken van gebeurtenissen.
Fouten bij het bijwerken van de gegevensset
Wanneer u een record in een gegevensset bijwerkt, kan er een fout optreden. U kunt bijvoorbeeld per ongeluk gegevens van het verkeerde type naar een kolom schrijven of gegevens die te lang zijn, of gegevens met een ander integriteitsprobleem. U kunt ook toepassingsspecifieke validatiecontroles hebben die aangepaste fouten kunnen veroorzaken tijdens elke fase van een updategebeurtenis. Zie Gegevens valideren in gegevenssets voor meer informatie.
Informatie over wijzigingen onderhouden
Informatie over de wijzigingen in een gegevensset wordt op twee manieren bijgehouden: door rijen te markeren die aangeven dat ze zijn gewijzigd (RowState) en door meerdere kopieën van een record (DataRowVersion) te bewaren. Door deze informatie te gebruiken, kunnen processen bepalen wat er in de gegevensset is gewijzigd en kunnen de juiste updates naar de gegevensbron worden verzonden.
RowState-eigenschap
De RowState eigenschap van een DataRow object is een waarde die informatie biedt over de status van een bepaalde rij met gegevens.
In de volgende tabel worden de mogelijke waarden van de DataRowState opsomming weergegeven:
| DataRowState-waarde | Beschrijving |
|---|---|
| Added | De rij is toegevoegd als item aan een DataRowCollection. (Een rij met deze status heeft geen bijbehorende oorspronkelijke versie omdat deze niet bestond toen de laatste AcceptChanges methode werd aangeroepen). |
| Deleted | De rij is verwijderd met behulp van het Delete van een DataRow-object. |
| Detached | De rij is gemaakt, maar maakt geen deel uit van een DataRowCollection. Een DataRow object heeft deze status direct nadat het is gemaakt, voordat het is toegevoegd aan een verzameling en nadat het is verwijderd uit een verzameling. |
| Modified | Een kolomwaarde in de rij is op een of andere manier gewijzigd. |
| Unchanged | De rij is niet gewijzigd sinds AcceptChanges voor het laatst is aangeroepen. |
Enumeratie DataRowVersion
Gegevenssets onderhouden meerdere versies van records. De DataRowVersion velden worden gebruikt bij het ophalen van de waarde in een DataRow met behulp van de Item[] eigenschap of de GetChildRows methode van het DataRow object.
In de volgende tabel worden de mogelijke waarden van de DataRowVersion opsomming weergegeven:
| DataRowVersion-waarde | Beschrijving |
|---|---|
| Current | De huidige versie van een record bevat alle wijzigingen die zijn uitgevoerd op de record sinds de laatste keer AcceptChanges werd aangeroepen. Als de rij is verwijderd, is er geen huidige versie. |
| Default | De standaardwaarde van een record, zoals gedefinieerd door het gegevenssetschema of de gegevensbron. |
| Original | De oorspronkelijke versie van een record is een kopie van de record, omdat het de laatste keer was dat wijzigingen werden doorgevoerd in de gegevensset. In de praktijk is dit doorgaans de versie van een record die wordt gelezen uit een gegevensbron. |
| Proposed | De voorgestelde versie van een record die tijdelijk beschikbaar is terwijl u zich midden in een update bevindt, dat wil gezegd, tussen het moment dat u de BeginEdit methode en de EndEdit methode aangeroepen hebt. Doorgaans hebt u toegang tot de voorgestelde versie van een record in een handler voor een gebeurtenis zoals RowChanging. Als u de CancelEdit methode aanroept, worden de wijzigingen omgekeerd en wordt de voorgestelde versie van de gegevensrij verwijderd. |
De oorspronkelijke en huidige versies zijn handig wanneer updategegevens naar een gegevensbron worden verzonden. Wanneer een update naar de gegevensbron wordt verzonden, bevindt de nieuwe informatie voor de database zich doorgaans in de huidige versie van een record. Informatie uit de oorspronkelijke versie wordt gebruikt om de record te vinden die moet worden bijgewerkt.
In een geval waarin de primaire sleutel van een record wordt gewijzigd, hebt u bijvoorbeeld een manier nodig om de juiste record in de gegevensbron te vinden om de wijzigingen bij te werken. Als er geen oorspronkelijke versie bestaat, wordt de record waarschijnlijk toegevoegd aan de gegevensbron, wat niet alleen resulteert in een extra ongewenste record, maar in één record die onjuist en verouderd is. De twee versies worden ook gebruikt in gelijktijdigheidsbeheer. U kunt de oorspronkelijke versie vergelijken met een record in de gegevensbron om te bepalen of de record is gewijzigd sinds deze in de gegevensset is geladen.
De voorgestelde versie is handig wanneer u validatie moet uitvoeren voordat u de wijzigingen daadwerkelijk doorvoert in de gegevensset.
Zelfs als records zijn gewijzigd, zijn er niet altijd originele of huidige versies van die rij. Wanneer u een nieuwe rij in de tabel invoegt, is er geen oorspronkelijke versie, alleen een huidige versie. Als u een rij verwijdert door de methode van Delete de tabel aan te roepen, is er een oorspronkelijke versie, maar geen huidige versie.
U kunt testen of er een specifieke versie van een record bestaat door een query uit te voeren op de methode van HasVersion een gegevensrij. U kunt beide versies van een record openen door een DataRowVersion opsommingswaarde door te geven als een optioneel argument wanneer u de waarde van een kolom aanvraagt.
Gewijzigde records ophalen
Het is gebruikelijk om niet elke record in een gegevensset bij te werken. Een gebruiker werkt bijvoorbeeld mogelijk met een Besturingselement Windows Forms DataGridView dat veel records weergeeft. De gebruiker kan echter slechts een paar records bijwerken, er een verwijderen en een nieuwe invoegen. Gegevenssets en gegevenstabellen bieden een methode (GetChanges) voor het retourneren van alleen de rijen die zijn gewijzigd.
U kunt subsets van gewijzigde records maken met behulp van de GetChanges methode van de gegevenstabel (GetChanges) of van de gegevensset (GetChanges) zelf. Als u de methode voor de gegevenstabel aanroept, wordt er een kopie van de tabel geretourneerd met alleen de gewijzigde records. Als u de methode voor de gegevensset aanroept, krijgt u ook een nieuwe gegevensset met alleen gewijzigde records.
GetChanges retourneert zelf alle gewijzigde records. Door daarentegen de gewenste DataRowState parameter door te geven aan de GetChanges methode, kunt u opgeven welke subset van gewijzigde records u wilt: nieuw toegevoegde records, records die zijn gemarkeerd voor verwijdering, losgekoppelde records of gewijzigde records.
Het verkrijgen van een subset van gewijzigde records is handig als u records wilt verzenden naar een ander onderdeel voor verwerking. In plaats van de volledige gegevensset te verzenden, kunt u de overhead van de communicatie met het andere onderdeel verminderen door alleen de records op te halen die het onderdeel nodig heeft.
Wijzigingen doorvoeren in de gegevensset
Wanneer er wijzigingen worden aangebracht in de gegevensset, wordt de RowState eigenschap van gewijzigde rijen ingesteld. De oorspronkelijke en huidige versies van records worden ingesteld, onderhouden en ter beschikking gesteld door de RowVersion accommodatie. De metagegevens die zijn opgeslagen in de eigenschappen van deze gewijzigde rijen zijn nodig voor het verzenden van de juiste updates naar de gegevensbron.
Als de wijzigingen de huidige status van de gegevensbron weerspiegelen, hoeft u deze informatie niet meer te onderhouden. Normaal gesproken zijn er twee keer dat de gegevensset en de bron gesynchroniseerd zijn:
Direct nadat u gegevens in de gegevensset hebt geladen, bijvoorbeeld wanneer u gegevens uit de bron leest.
Nadat u wijzigingen van de gegevensset naar de gegevensbron hebt verzonden (maar niet eerder, omdat u de wijzigingsgegevens kwijtraakt die nodig zijn om wijzigingen naar de database te verzenden).
U kunt de in behandeling zijnde wijzigingen doorvoeren in de gegevensset door de AcceptChanges methode aan te roepen. AcceptChanges Normaal gesproken wordt dit op de volgende momenten aangeroepen:
Nadat u de gegevensset hebt geladen. Als u een gegevensset laadt door de methode van
Filleen TableAdapter aan te roepen, worden wijzigingen automatisch doorgevoerd door de adapter. Als u echter een gegevensset laadt door er een andere gegevensset in samen te voegen, moet u de wijzigingen handmatig doorvoeren.Opmerking
U kunt voorkomen dat de adapter de wijzigingen automatisch doorvoert wanneer u de
Fillmethode aanroept door deAcceptChangesDuringFilleigenschap van de adapter in te stellen opfalse. Als deze optie is ingesteld opfalse, wordt de RowState van elke rij die tijdens het invullen wordt ingevoerd, ingesteld op Added.Nadat u gegevenssetwijzigingen naar een ander proces hebt verzonden, zoals een XML-webservice.
Waarschuwing
Als u de wijziging op deze manier doorvoert, worden alle wijzigingsgegevens gewist. Voer pas wijzigingen door nadat u klaar bent met het uitvoeren van bewerkingen waarvoor uw toepassing moet weten welke wijzigingen zijn aangebracht in de gegevensset.
Met deze methode wordt het volgende bereikt:
Hiermee wordt de Current versie van een record in zijn Original-versie geschreven en overschrijft de oorspronkelijke versie.
Verwijdert elke rij waarin de RowState eigenschap is ingesteld op Deleted.
Hiermee stelt u de RowState eigenschap van een record in op Unchanged.
De AcceptChanges methode is beschikbaar op drie niveaus. U kunt het aanroepen op een DataRow object om wijzigingen voor alleen die rij door te voeren. U kunt het ook aanroepen op een DataTable object om alle rijen in een tabel door te voeren. Ten slotte kunt u het op het DataSet object aanroepen om alle wijzigingen in behandeling door te voeren in alle records van alle tabellen van de dataset.
De volgende tabel beschrijft welke wijzigingen worden doorgevoerd, afhankelijk van het object waarop de methode wordt aangeroepen.
| Methode | Resultaat |
|---|---|
| System.Data.DataRow.AcceptChanges | Wijzigingen worden alleen doorgevoerd in de specifieke rij. |
| System.Data.DataTable.AcceptChanges | Wijzigingen worden doorgevoerd in alle rijen in de specifieke tabel. |
| System.Data.DataSet.AcceptChanges | Wijzigingen worden doorgevoerd in alle rijen in alle tabellen van de gegevensset. |
Opmerking
Als u een gegevensset laadt door de methode van Fill TableAdapter aan te roepen, hoeft u geen wijzigingen expliciet te accepteren.
Fill De methode roept standaard de AcceptChanges methode aan nadat deze klaar is met het vullen van de gegevenstabel.
Met een gerelateerde methode, RejectChanges, wordt het effect van wijzigingen ongedaan gemaakt door de Original versie terug te kopiëren naar de Current versie van records. Ook wordt de RowState record teruggezet op Unchanged.
Gegevensvalidatie
Om te controleren of de gegevens in uw toepassing voldoen aan de vereisten van de processen waaraan deze worden doorgegeven, moet u vaak validatie toevoegen. Dit kan betrekking hebben op het controleren of de invoer van een gebruiker in een formulier juist is, gegevens valideert die door een andere toepassing naar uw toepassing worden verzonden of zelfs het controleren van die informatie die binnen uw onderdeel wordt berekend, valt binnen de beperkingen van uw gegevensbron- en toepassingsvereisten.
U kunt gegevens op verschillende manieren valideren:
Voeg in de bedrijfslaag code toe aan uw toepassing om gegevens te valideren. De gegevensset is één plek waar u dit kunt doen. De gegevensset biedt enkele voordelen van back-endvalidatie, zoals de mogelijkheid om wijzigingen te valideren wanneer kolom- en rijwaarden veranderen. Zie Gegevens valideren in gegevenssets voor meer informatie.
Voeg in de presentatielaag validatie toe aan formulieren. Zie Validatie van gebruikersinvoer in Windows Forms voor meer informatie.
In de back-end van de gegevens, door gegevens te verzenden naar de gegevensbron, bijvoorbeeld de database, en toe te staan dat de gegevens worden geaccepteerd of geweigerd. Als u werkt met een database met geavanceerde faciliteiten voor het valideren van gegevens en het verstrekken van foutinformatie, kan dit een praktische aanpak zijn omdat u de gegevens kunt valideren, ongeacht waar deze vandaan komen. Deze benadering is echter mogelijk niet geschikt voor toepassingsspecifieke validatievereisten. Bovendien kan het valideren van gegevens door de gegevensbron leiden tot talloze retouren naar de gegevensbron, afhankelijk van hoe uw toepassing de oplossing van validatiefouten die door de back-end worden gegenereerd, vergemakkelijkt.
Belangrijk
Wanneer u gegevensopdrachten gebruikt met een CommandType eigenschap die is ingesteld Textop, controleert u zorgvuldig de gegevens die van een client worden verzonden voordat u deze doorgeeft aan uw database. Kwaadwillende gebruikers kunnen proberen gewijzigde of aanvullende SQL-instructies te verzenden (injecteren) in een poging om onbevoegde toegang te krijgen of de database te beschadigen. Voordat u gebruikersinvoer overbrengt naar een database, moet u altijd controleren of de gegevens geldig zijn. Het is een best practice om waar mogelijk geparameteriseerde query's of opgeslagen procedures te gebruiken.
Updates verzenden naar de gegevensbron
Nadat er wijzigingen zijn aangebracht in een gegevensset, kunt u de wijzigingen naar een gegevensbron verzenden. Meestal doet u dit door de Update methode van een TableAdapter (of gegevensadapter) aan te roepen. De methode doorloopt elke record in een gegevenstabel, bepaalt welk type update is vereist (bijwerken, invoegen of verwijderen), indien van toepassing, en voert vervolgens de juiste opdracht uit.
Als een illustratie van hoe updates worden uitgevoerd, stel dat uw toepassing gebruikmaakt van een gegevensset die één gegevenstabel bevat. De toepassing haalt twee rijen op uit de database. Na het ophalen ziet de gegevenstabel in het geheugen er als volgt uit:
(RowState) CustomerID Name Status
(Unchanged) c200 Robert Lyon Good
(Unchanged) c400 Nancy Buchanan Pending
Uw toepassing wijzigt de status van Nancy Buchanan in 'Preferred'. Als gevolg van deze wijziging wordt de waarde van de RowState eigenschap voor die rij gewijzigd van Unchanged in Modified. De waarde van de RowState eigenschap voor de eerste rij blijft Unchangedbehouden. De gegevenstabel ziet er nu als volgt uit:
(RowState) CustomerID Name Status
(Unchanged) c200 Robert Lyon Good
(Modified) c400 Nancy Buchanan Preferred
Uw toepassing roept nu de Update methode aan om de gegevensset naar de database te verzenden. De methode inspecteert elke rij op zijn beurt. Voor de eerste rij verzendt de methode geen SQL-instructie naar de database omdat deze rij niet is gewijzigd sinds deze oorspronkelijk is opgehaald uit de database.
Voor de tweede rij roept de Update methode echter automatisch de juiste gegevensopdracht aan en verzendt deze naar de database. De specifieke syntaxis van de SQL-instructie is afhankelijk van het dialect van SQL dat wordt ondersteund door het onderliggende gegevensarchief. Maar de volgende algemene kenmerken van de verzonden SQL-instructie zijn opmerkelijk:
De verzonden SQL-instructie is een
UPDATEinstructie. De adapter weet dat hij eenUPDATEinstructie moet gebruiken omdat de waarde van de eigenschap RowStateModified is.De verzonden SQL-instructie bevat een
WHEREcomponent die aangeeft dat het doel van deUPDATEinstructie de rij is waarCustomerID = 'c400'. Dit deel van deSELECTinstructie onderscheidt de doelrij van alle andere omdat deCustomerIDprimaire sleutel van de doeltabel is. De informatie voor deWHEREcomponent is afgeleid van de oorspronkelijke versie van de record (DataRowVersion.Originalals de waarden die nodig zijn om de rij te identificeren, zijn gewijzigd.De verzonden SQL-instructie bevat de
SETcomponent om de nieuwe waarden van de gewijzigde kolommen in te stellen.Opmerking
Als de eigenschap van
UpdateCommandTableAdapter is ingesteld op de naam van een opgeslagen procedure, maakt de adapter geen SQL-instructie. In plaats daarvan wordt de opgeslagen procedure aangeroepen met de juiste parameters die zijn doorgegeven.
Parameters doorgeven
Meestal gebruikt u parameters om de waarden door te geven voor records die in de database worden bijgewerkt. Wanneer de methode van Update TableAdapter een UPDATE instructie uitvoert, moet deze de parameterwaarden invullen. Deze waarden worden opgehaald uit de Parameters verzameling voor de juiste gegevensopdracht, in dit geval het UpdateCommand object in de TableAdapter.
Als u de Visual Studio-hulpprogramma's hebt gebruikt om een gegevensadapter te genereren, bevat het UpdateCommand object een verzameling parameters die overeenkomen met elke tijdelijke aanduiding voor parameters in de instructie.
De System.Data.SqlClient.SqlParameter.SourceColumn eigenschap van elke parameter verwijst naar een kolom in de gegevenstabel. De eigenschap voor de au_id en Original_au_id parameters is bijvoorbeeld SourceColumn ingesteld op de kolom die de auteur-id bevat in de gegevenstabel. Wanneer de Update methode van de adapter wordt uitgevoerd, wordt de auteur-id kolom gelezen uit het record dat wordt bijgewerkt en worden de waarden in de instructie ingevuld.
In een UPDATE instructie moet u zowel de nieuwe waarden (de waarden die naar de record worden geschreven) als de oude waarden opgeven (zodat de record zich in de database kan bevinden). Er zijn dus twee parameters voor elke waarde: één voor de SET component en een andere voor de WHERE component. Beide parameters lezen gegevens uit de record die wordt bijgewerkt, maar ze krijgen verschillende versies van de kolomwaarde op basis van de eigenschap van SourceVersion de parameter. De parameter voor de SET component haalt de huidige versie op en de parameter voor de WHERE component haalt de oorspronkelijke versie op.
Opmerking
U kunt ook zelf waarden instellen in de Parameters verzameling in code, wat u meestal zou doen in een gebeurtenis-handler voor de gebeurtenis van RowChanging de gegevensadapter.