Sdílet prostřednictvím


Uložit data do databáze

 

Publikováno: duben 2016

Datová sada je v paměti kopii dat. Pokud upravíte tato data, můžete uložit tyto změny zpět do databáze. Můžete udělat třemi způsoby:

  • pomocí jedné z volání Update metod TableAdapter

  • pomocí jedné z metod TableAdapter DBDirect volání.

  • voláním metody UpdateAll na TableAdapterManager který Visual Studio generuje pro vás při datová sada obsahuje tabulky, které souvisejí s jinými tabulkami v datové sadě.

Když můžete vytvořit datovou vazbu tabulky datové sady na ovládací prvky na formuláři Windows nebo kódu stránky XAML, provede architektura datové vazby tuto práci za vás.

Pokud jste obeznámeni s adaptéry tabulek, můžete přejít přímo na jednu z těchto témat:

Téma Popis
Postupy: Vkládání nových záznamů do databáze Postup provádění aktualizací a vloží pomocí objekty TableAdapter nebo objekty příkazu
Postupy: Aktualizace dat pomocí TableAdapter Jak provádět aktualizace s objekty TableAdapter.
Hierarchická aktualizace Jak provádět aktualizace z datové sady pomocí dvou nebo více souvisejících tabulek.
Návod: Zpracování výjimky souběžnosti Způsob zpracování výjimek, když dva uživatelé pokusí změnit stejná data v databázi ve stejnou dobu.
Postupy: Ukládání dat pomocí transakce Jak k uložení dat v transakci pomocí oboru názvů System.Transactions a objekt TransactionScope
Návod: Ukládání dat do transakce Jak k uložení dat v transakci pomocí oboru názvů System.Transactions.
Návod: Ukládání dat do databáze (více tabulek) Jak upravit záznamy a uložit změny ve více tabulkách zpět do databáze.
Postupy: Ukládání dat z objektu do databáze Jak předat data z objektu, který není v datové sadě k databázi pomocí TableAdapter DbDirect metody.
Návod: Ukládání dat pomocí metod TableAdapter DBDirect Způsob použití objektu TableAdapter odesílat dotazy SQL přímo do databáze.
Postupy: Uložení datové sady ve formátu XML Jak uložit datové sady do dokumentu XML.

Dvoufázová aktualizace

Aktualizace zdroje dat je dvoustupňový proces. Prvním krokem je aktualizace datové sady pomocí nové záznamy, záznamy změněné nebo odstraněné záznamy. Pokud vaše aplikace nikdy odesílá tyto změny zpět do zdroje dat, pak budete mít k aktualizaci.

Pokud odešlete změny zpět do databáze, druhý krok není potřeba. Pokud nepoužíváte ovládací prvky vázané na data, budete muset ručně volat metodu aktualizace stejné TableAdapter (nebo adaptér dat), který jste použili k naplnění datové sady, i když můžete použít také různé adaptéry, například chcete-li přesunout data z jednoho zdroje dat na jiný nebo aktualizovat více zdrojů dat. Pokud nepoužíváte datové vazby a ukládají změny pro tabulky v relaci, budete muset ručně vytvořit instanci proměnné automaticky generované třídy TableAdapterManager a volejte příslušnou metodu UdpateAll.

Visual Basic – aktualizace sady dat
Proces aktualizace dvoufázová a role DataRowVersion v úspěšné aktualizaci

Datové sady obsahuje kolekce tabulek, které obsahují kolekce řádků. Při přidávání nebo odstraňování řádků, pokud máte v úmyslu později aktualizovat podkladové zdroje dat je nutné použít metody na vlastnost DataTable.DataRowCollection. Tyto metody provádět sledování změn, které jsou potřebné pro aktualizaci zdroje dat. Pokud zavoláte kolekci RemoveAt u vlastnosti řádků, nebude odstranění sdělují zpět do databáze.

Slučování datové sady

Můžete aktualizovat obsah datové sady pomocí slučování s jinou datovou sadu. To zahrnuje kopírování obsahu zdroj datové sady do volání datové sady (označována jako cíl datové sady). Při sloučení datové sady jsou přidány nové záznamy v datové sadě zdrojové do cílové datové sady. Kromě toho další sloupce v datové sadě zdroje jsou přidány do cílové datové sady. Slučování datové sady je užitečné, pokud máte místní datovou sadu a získat druhý datové sady z jiné aplikace nebo součásti, jako jsou webové služby XML, nebo pokud potřebujete k integraci dat z více datových sad.

Při slučování datové sady, můžete předat argument typu Boolean (preserveChanges), která oznamuje Merge Metoda zda chcete zachovat existující změny v datové sadě cíl. Vzhledem k tomu, že datové sady udržovat více verzí sady záznamů, je důležité mít na paměti, že je více než jedna verze záznamy sloučení. Následující tabulka znázorňuje záznam v dva datové sady, které budou sloučeny:

DataRowVersion Cílový objekt dataset Zdroj datové sady
Původní James Wilson James C. Wilson
Aktuální Jan Wilson James C. Wilson

Volání Merge metodu na výše uvedené tabulky s preserveChanges=false targetDataset.Merge(sourceDataset) má za následek následující:

DataRowVersion Cílový objekt dataset Zdroj datové sady
Původní James C. Wilson James C. Wilson
Aktuální James C. Wilson James C. Wilson

Volání Merge metodu s preserveChanges = true targetDataset.Merge(sourceDataset, true) má za následek následující:

DataRowVersion Cílový objekt dataset Zdroj datové sady
Původní James C. Wilson James C. Wilson
Aktuální Jan Wilson James C. Wilson

Upozornění

V preserveChanges = true scénář, pokud RejectChanges Metoda je volána na záznam v datové sadě cíl, pak se vrátí k původní data z zdroj datové sady. To znamená, že pokud se pokusíte aktualizovat původní zdroj dat s datovou sadu cíl, ji nebudete moci najít původní řádek aktualizace. Po vyplnění jinou datovou sadu s aktualizované záznamy ze zdroje dat můžete zabránit narušení souběžného zpracování a následnému provedením sloučení brání narušení souběžného zpracování. (Pokud jiný uživatel upraví záznam ve zdroji dat poté, co bylo vyplněno datovou sadu dojde k porušení souběžnosti.)

Omezení aktualizací

Chcete-li provést změny stávající řádek dat, přidat nebo aktualizovat data v jednotlivých sloupcích. Obsahuje-li datovou sadu omezení (například cizí klíče nebo hodnotu Null omezení), je možné, že při aktualizaci záznamu – po dokončení aktualizace jeden sloupec, ale předtím, než se dostanete na další stránku – záznamu může být dočasně v chybovém stavu.

Chcete-li zabránit narušení předčasné omezení můžete dočasně pozastavit aktualizace omezení. To má dva účely:

  • Chyba brání hlášeny při aktualizaci jeden sloupec předtím, než se dostanete do jiného sloupce.

  • Ji pozastaví určité aktualizace vyvolány události od právě (události, které se často používají k ověření).

Po dokončení aktualizace můžete znovu povolit omezení kontroly, které také znovu povolí události aktualizace a jejich vyvolává.

Poznámka

Ve Windows Forms architektura datové vazby integrována do objektu datagrid pozastaví omezení kontrolu, dokud se aktivuje mimo řádek, a není nutné explicitně zavolat BeginEdit, EndEdit nebo CancelEdit metody.

Omezení jsou automaticky zakázáno, pokud Merge Metoda je volána na datové sady. Po dokončení sloučení v případě, že neexistují žádná omezení na datovou sadu, která nemůže být povolena, pak ConstraintException je vyvolána výjimka. V této situaci EnforceConstraints je vlastnost nastavena na false a všechny narušení omezení musí být vyřešeny před obnovením EnforceConstraints vlastnost true.

Po dokončení aktualizace můžete znovu povolit omezení kontroly, které také znovu povolí události aktualizace a jejich vyvolává.

Další informace o pozastavení událostí naleznete v tématu Vypnutí omezení při naplňování datové sady.

Chyby aktualizace datové sady

Při aktualizaci záznamu v datové sadě, je možné k chybě. Například může být omylem zapsat data do sloupce, který je chybný datového typu, nebo je příliš dlouhý, nebo má jiný problém integrity. Nebo můžete mít specifické pro aplikaci ověřovací kontroly, které může být spojeno vlastní chyby během jakékoli fázi událost aktualizace. Další informace naleznete v tématu Ověření dat v datových sadách.

Zachování informací o změnách

Informace o změnách v datové sadě jsou udržovány dvěma způsoby: označením řádek, který označuje, zda byl změněn (RowState) a udržováním více kopií záznamu (DataRowVersion). Pomocí těchto informací procesy můžete zjistit, co se změnilo v datové sadě a ke zdroji dat můžete odeslat příslušné aktualizace.

Vlastnost RowState

RowState Vlastnost DataRow objektu je hodnota, která poskytuje informace o stavu konkrétní řádek s daty.

Následující tabulka uvádí možné hodnoty DataRowState výčtu:

Hodnota DataRowState Popis
Added Řádek byl přidán jako položku, kterou chcete DataRowCollection. (Řádek v tomto stavu nemá odpovídající původní verze, protože neexistuje v době poslední AcceptChanges byla volána metoda).
Deleted Řádek byl odstraněn, pomocí Delete z DataRow objektu.
Detached Řádek byl vytvořen, ale není součástí žádné DataRowCollection. A DataRow objekt je v tomto stavu ihned po jeho vytvoření a předtím, než je přidána do kolekce, nebo pokud byla odebrána z kolekce.
Modified Hodnota sloupce v řádku byl změněn nějakým způsobem.
Unchanged Řádek nebyl změněn od AcceptChanges byla volána naposledy.

DataRowVersion – výčet

Datové sady udržovat více verzí sady záznamů.DataRowVersion Výčet DataRow objektu je hodnota, která lze použít k vrácení konkrétní verze DataRow objektu.

Následující tabulka uvádí možné hodnoty DataRowVersion výčtu:

Hodnota DataRowVersion Popis
Current Aktuální verze záznam obsahuje všechny změny prováděné u záznamu od posledního AcceptChanges byla volána. Pokud byl odstraněn řádek není žádná aktuální verze.
Default Výchozí hodnota záznamu, podle definice v datové sadě schématu nebo datového zdroje.
Original Jak bylo, že byly potvrzeny poslední změny času v datové sadě, je původní verze záznamu kopii záznamu. V praxi obvykle se jedná verze záznamu pro čtení z datového zdroje.
Proposed Navrhovaná verze záznam, který je k dispozici, dočasně, zatímco jsou uprostřed aktualizace – tedy mezi čas jste volali metodu BeginEdit Metoda a EndEdit Metoda. Obvykle se navrhované verze záznamu v obslužné rutině události, jako RowChanging. Vyvolání CancelEdit Metoda vrátí zpět změny a odstraní navrhované verze datový řádek.

Původní a aktuální verze jsou užitečné, pokud se ke zdroji dat přenášejí informace o aktualizaci. Při aktualizaci odeslání ke zdroji dat, nové informace pro databázi je obvykle v aktuální verzi záznamu. Informace z původní verze slouží k vyhledání záznam, který chcete aktualizovat. Například v případě, kde se změní primární klíče v záznamu, musí mít způsob, jak vyhledat správné záznam ve zdroji dat za účelem aktualizace změny. Pokud neexistovala žádná původní verze by být záznam s největší pravděpodobností připojen ke zdroji dat, výsledná pouze v extra nežádoucí záznamu, ale v jednom záznamu, který je nesprávné a je zastaralý. Dvě verze používají také v řízení souběžnosti; můžete porovnat původní verze proti záznam ve zdroji dat. Chcete-li zjistit, pokud záznam byl změněn, protože byla načtena do datové sady.

Navrhovaná verze je užitečné, když je potřeba provést ověření před skutečně provedení změn do datové sady.

I v případě, že došlo ke změně záznamy, existují není vždy původní nebo aktuální verze tohoto řádku. Při vložení nového řádku do tabulky není žádná původní verze, aktuální verze. Podobně pokud odstranit řádek v tabulce voláním Delete Metoda, je původní verze, ale žádná aktuální verze.

Můžete otestovat, zda existuje záznam určité verze pomocí dotazu na řádek dat HasVersion Metoda. Buď verzi záznamu je možné otevřít předáním DataRowVersion Hodnota výčtu jako nepovinný argument při požadavku hodnota sloupce.

Získávání změněné záznamy

Je běžné aktualizaci každý záznam v datové sadě. Uživatel může například pracovat s použitím Windows Forms DataGridView ovládací prvek, který zobrazuje mnoho záznamů. Uživatel může však aktualizovat pouze několik položek, odstraníte jeden a vložit nový. Datové sady a data v tabulkách metodu (GetChanges) pro vrácení pouze řádky, které byly změněny.

Můžete vytvořit podmnožiny změněné záznamy pomocí GetChanges Metoda tabulky dat (GetChanges) nebo sady dataset (GetChanges) samotného. Pokud zavoláte metodu pro tabulku dat, vrátí kopii tabulky se pouze změněné záznamy. Podobně pokud zavoláte metodu datovou sadu, získáte novou datovou sadu s pouze změněné záznamy v něm.GetChanges sám o sobě vrátí všechny změněné záznamy. Naopak předáním požadované množství DataRowState jako parametr GetChanges metodu, můžete určit jaké podmnožinou změněné záznamy, které chcete, aby: nově přidané záznamů, záznamy, které jsou označené k odstranění, odpojit záznamy nebo změněné záznamy.

Získávání podmnožinu změněné záznamy je užitečné, pokud chcete odeslat záznamy do jiné komponenty ke zpracování. Místo odeslání celé sady dat, můžete snížit režijní komunikovat s jinou součástí získáním pouze záznamy, které potřebuje komponentu. Další informace naleznete v tématu Postupy: Načítání změněných řádků.

Potvrzení změn v datové sadě

Při provedení změn v datové sadě, RowState změněných řádků je nastavena. Původní a aktuální verze záznamy navázat a udržovat a zpřístupněny pomocí RowVersion vlastnost. Metadata uložená v těchto vlastnostech představující změny je nutný k odeslání správné aktualizací ke zdroji dat.

Pokud změny odráží aktuální stav zdroje dat, již nepotřebujete zachovat tyto informace. Obvykle jsou k dispozici dvakrát když jsou synchronizována datovou sadu a její zdroj:

  • Ihned po informace mají načtena do datové sady, například při čtení dat ze zdroje.

  • Po odeslání změn od objektu dataset ke zdroji dat (ale před, protože by dojít ke ztrátě informace o změně potřebné k odesílání změn databáze).

Můžete potvrdit čekající změny do datové sady pomocí volání AcceptChanges Metoda. Obvykle AcceptChanges by byla volána v následujících časech ve vaší aplikaci.

  • Poté, co jste načetli datovou sadu. Pokud načíst datové sady pomocí volání objektu TableAdapter Fill Metoda pak adaptér pro vás automaticky provede změny. Však Pokud načtete sloučením jiné datové sady do něj datové sady, pak budete muset ručně potvrdíte změny.

    Poznámka

    Adaptér můžete zabránit automaticky provedení změn při volání Fill Metoda nastavením AcceptChangesDuringFill vlastnost adaptér tak, aby false. Pokud je nastaven na false, pak se RowState každého řádku vložen během výplně je nastavena na Added.

  • Po jste odeslali změn datové sady na jiný proces, jako jsou webové služby XML.

    Upozornění

    Provádění změn tímto způsobem vymaže všechny informace o změně. Až poté, co jste provedli všechny operace, ve kterých vaše aplikace závisí na tom, jaké změny byly provedeny v datové sadě není potvrzení změn.

Tato metoda provede následující akce:

AcceptChanges Metoda je k dispozici tři úrovně. Můžete volat na DataRow objektu, který potvrdí změny právě daného řádku. Ji můžete také volat na DataTable objekt, který chcete potvrdit všechny řádky v tabulce, nebo na DataSet objekt, který chcete potvrdit všechny čekající změny v všechny záznamy všech tabulek datové sady.

Následující tabulka popisuje, které změny se potvrdí na co objekt že je zavolána metoda na základě.

Metoda Výsledek
DataRow.AcceptChanges Změny jsou potvrzené pouze na konkrétní řádek
DataTable.AcceptChanges Jsou potvrzené změny na všechny řádky v tabulce konkrétní
DataSet.AcceptChanges Jsou potvrzené změny na všechny řádky ve všech tabulkách datové sady

Poznámka

Pokud načíst datové sady pomocí volání objektu TableAdapter Fill Metoda, není nutné explicitně přijetí změn; ve výchozím nastavení Fill volání metod AcceptChanges Metoda při vyplňování tabulky dat byl dokončen.

Související metoda RejectChanges, vrátí zpět změny zkopírováním Original verze zpět do Current verze záznamů a nastavení RowState z každého záznamu zpět a Unchanged.

Ověřování dat

Chcete-li ověřit, zda data v aplikaci splňuje požadavky na procesy, které je předána, máte často přidat ověřování. To může zahrnovat kontrolu, že vstup uživatele ve formuláři je správný, ověřování dat odeslaných do vaší aplikace jinou aplikací nebo dokonce kontrola informace počítá uvnitř komponent spadá do omezení data požadavky na zdroje a aplikace.

Je nutné ověřit data v několika způsoby:

  • V obchodní vrstvě, přidáním kódu do aplikace můžete ověřit data. Datová sada je jedno místo, můžete to provést. Datová sada obsahuje některé z výhod back-end ověření – například je lze využít pro ověření změn, jako jsou změna hodnoty řádků a sloupců. Další informace naleznete v tématu Ověření dat v datových sadách.

  • V prezentační vrstvě přidáním ověření do formulářů. Další informace naleznete v tématu Ověření uživatelského vstupu ve Windows Forms.

  • V datech back-endu odesílá data do zdroje dat – například databáze – a díky kterému jej přijmout nebo odmítnout data. Při práci s databází, která má sofistikované zařízení pro ověřování dat a poskytuje informace o chybě, může to být praktické přístup, protože můžete ověřit data bez ohledu na to, odkud pocházejí z. Je však nemusí pojmout požadavky na ověření specifické pro aplikaci. Kromě toho s ověření dat zdroje dat může způsobit mnoho zpátečních cest ke zdroji dat, v závislosti na tom, jak vaše aplikace usnadňuje řešení chyb při ověřování vyvolaných back-end.

    Důležité

    Při použití příkazů dat s CommandType vlastnost nastavena na hodnotu Text, pečlivě zkontrolujte informace, které se odesílá z klienta před jeho odesláním do databáze. Uživatelé se zlými úmysly se může pokusit o odesílání (Vložit) modified nebo další příkazy SQL ve snaze o získání neautorizovaného přístupu nebo poškození databáze. Před přenosem vstupu uživatele na databázi vždy ověřte, že informace jsou neplatné. je vhodné, vždy použijte parametrizované dotazy nebo uložené procedury, pokud je to možné. Další informace naleznete v tématu Script Exploits Overview.

Poté, co byly provedeny změny v datové sadě, mohou přenášet změny ke zdroji dat. Nejčastěji to provést pomocí volání Update Metoda TableAdapter (nebo adaptér dat). Metoda projde každý záznam v tabulce dat, určuje, jaký typ aktualizace je vyžadováno (aktualizaci, vložení nebo odstranění), pokud existuje a potom spuštěn příslušný příkaz.

Jak je aktualizace přeneseno do zdroje dat

Jako ilustraci jak provedeny aktualizace Předpokládejme, že vaše aplikace používá obsahující do jedné tabulky datového datové sady. Aplikace načte dva řádky z databáze. Po načtení vypadá v tabulce dat v paměti takto:

(RowState)     CustomerID   Name             Status  
(Unchanged)    c200         Robert Lyon      Good  
(Unchanged)    c400         Nancy Buchanan    Pending  

Vaše aplikace Petr Stoklasa stav změní na "Upřednostňovaných." V důsledku této změny hodnotu RowState změny vlastností pro daný řádek z Unchanged do Modified. Hodnota RowState vlastnost pro první řádek zůstane Unchanged. Tabulka dat nyní vypadá takto:

(RowState)     CustomerID   Name             Status  
(Unchanged)    c200         Robert Lyon      Good  
(Modified)     c400         Nancy Buchanan    Preferred  

Aplikace nyní zavolat Update Metoda předávat datové sady do databáze. Metoda zkontroluje, zda obsahuje každý řádek zase. Pro první řádek metody přenáší žádný příkaz SQL na databázi, protože daný řádek nebyl změněn od původně načtení z databáze.

Pro druhý řádek však Update Metoda automaticky vyvolá příkaz správná data a odesílá do databáze. Specifické syntaxe příkazu SQL závisí na dialekt podporovaných základní úložiště dat. SQL. Ale následující obecné vlastnosti příkazu SQL přenášených zajímavosti:

  • Přenášených příkaz jazyka SQL je příkazu UPDATE. Adaptér ví používat příkaz UPDATE, protože hodnota RowState vlastnost je Modified.

  • Přenášených příkaz SQL obsahuje klauzuli WHERE označující, že cíl pro příkaz UPDATE je řádek jehož CustomerID = 'c400'. Cílový řádek tuto část příkazu SELECT odlišuje od všech ostatních, protože CustomerID je primární klíč cílové tabulky. Informace pro klauzuli WHERE je odvozen od původní verze záznamu (DataRowVersion.Original), v případě, že byly změněny hodnoty požadované k identifikaci řádku.

  • Přenášených příkaz SQL obsahuje klauzuli SET, a nastavte nové hodnoty upravené sloupců.

    Poznámka

    Pokud TableAdapter UpdateCommand vlastnost byla nastavena na název uložené procedury, adaptér není vytvoření příkazu SQL. Místo toho volá uloženou proceduru s příslušnými parametry předané.

Předávání parametrů

Hodnoty pro záznamy, které aktualizují v databázi se obvykle předávají pomocí parametrů. Když TableAdapter Update Metoda spustí příkaz UPDATE, je nutné zadat hodnoty parametrů. Získává tyto hodnoty z Parameters kolekce pro příkaz příslušná data – v takovém případě UpdateCommand objektu v objektu TableAdapter.

Pokud jste použili nástroje sady Visual Studio ke generování datový adaptér UpdateCommand objekt bude obsahovat kolekci parametrů, které odpovídají každý parametr zástupný symbol v příkazu.

SqlParameter.SourceColumn Vlastnost každý parametr odkazuje na sloupec v tabulce data. Například SourceColumn vlastnost pro au_id a Original_au_id parametry je nastavena na libovolné sloupec v tabulce dat obsahuje kód autora. Pokud je adaptér Update spuštěna metoda přečte Autor sloupec id z záznamu aktualizované a vyplní hodnoty do příkazu.

V příkazu UPDATE je třeba zadat obě nové hodnoty (ty, které budou zapsány do záznamu) stejně jako původní hodnoty (tak, aby záznam, který chcete aktualizovat, se může nacházet v databázi). Proto existují dva parametry pro každou hodnotu: jeden pro klauzuli SET a jinou pro klauzuli WHERE. Oba parametry čtení dat ze záznamu aktualizované, ale dostanou různé verze na základě parametru na hodnotu ve sloupci SqlParameter.SourceVersion vlastnost. Parametr pro klauzuli SET získá aktuální verzi a parametr klauzule WHERE získá původní verze.

Poznámka

Hodnoty lze také nastavit Parameters kolekce sami v kódu, což by obvykle provést v obslužné rutině události pro adaptér dat RowChanging událostí.

Viz také

TableAdapter – přehled
Postupy: Aktualizace dat pomocí TableAdapter
Přehled datových aplikacích v sadě Visual Studio
Připojení k datům v sadě Visual Studio
Příprava vaší aplikace k příjmu dat
Načítání dat do aplikace
Vytvoření vazby ovládacích prvků k datům v sadě Visual Studio
Upravování dat ve vaší aplikaci
Ověřování dat
Ukládání dat