Vyplnění datových sad pomocí objektů TableAdapter v aplikacích .NET Framework

Poznámka:

Datové sady a související třídy jsou staršími technologiemi rozhraní .NET Framework z počátku 2000, které aplikacím umožňují pracovat s daty v paměti, zatímco aplikace jsou odpojené od databáze. Jsou zvláště užitečné pro aplikace, které uživatelům umožňují upravovat data a uchovávat změny zpět do databáze. I když se datové sady ukázaly jako velmi úspěšná technologie, doporučujeme, aby nové aplikace .NET používaly Entity Framework Core. Entity Framework poskytuje přirozenější způsob práce s tabulkovými daty jako objektovými modely a má jednodušší programovací rozhraní.

Komponenta TableAdapter vyplní datovou sadu daty z databáze na základě jednoho nebo více dotazů nebo uložených procedur, které zadáte. Objekty TableAdapter mohou také provádět přidání, aktualizace a odstranění databáze, aby se zachovaly změny provedené v datové sadě. Můžete také vydat globální příkazy, které nesouvisejí s žádnou konkrétní tabulkou.

Poznámka:

Návrháři sady Visual Studio generují nástroje TableAdapter. Pokud vytváříte datové sady prostřednictvím kódu programu, použijte DataAdapter, což je třída .NET.

Podrobné informace o operacích TableAdapter můžete přeskočit přímo na jedno z těchto témat:

Téma Popis
Vytvoření a konfigurace objektů TableAdapter Jak používat návrháře k vytváření a konfiguraci objektů TableAdapter
Vytvoření parametrizovaných dotazů TableAdapter Jak uživatelům povolit zadávání argumentů procedurám nebo dotazům TableAdapter
Přímý přístup k databázi pomocí objektů TableAdapter Jak používat metody Dbdirect objektů TableAdapter
Vypnutí omezení při naplňování datové sady Jak pracovat s omezeními cizího klíče při aktualizaci dat
Rozšíření funkcí prvku TableAdapter Postup přidání vlastního kódu do objektů TableAdapter
Čtení dat XML do datové sady Jak pracovat s XML

Přehled objektů TableAdapter

Objekty TableAdapter jsou komponenty generované návrhářem, které se připojují k databázi, spouštějí dotazy nebo uložené procedury a vyplní dataTable vrácenými daty. Objekty TableAdapter také odesílají aktualizovaná data z vaší aplikace zpět do databáze. Na objektu TableAdapter můžete spouštět tolik dotazů, kolik chcete, pokud vrací data, která odpovídají schématu tabulky, ke které je přidružen objekt TableAdapter. Následující diagram ukazuje, jak Objekty TableAdapter pracují s databázemi a dalšími objekty v paměti:

Data flow in a client application

Zatímco TableAdapter jsou navrženy pomocí Návrhář datové sady, Třídy TableAdapter nejsou generovány jako vnořené třídy DataSet. Nacházejí se v samostatných oborech názvů, které jsou specifické pro každou datovou sadu. Pokud máte například datovou sadu s názvem NorthwindDataSet, objekty TableAdapter, které jsou přidruženy k DataTableobjektům v NorthwindDataSet oboru názvů, budou v NorthwindDataSetTableAdapters oboru názvů. Pro programový přístup k určitému typu TableAdapter musíte deklarovat novou instanci typu TableAdapter. Příklad:

NorthwindDataSet northwindDataSet = new NorthwindDataSet();

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

customersTableAdapter.Fill(northwindDataSet.Customers);

Přidružené schéma datové tabulky

Při vytváření objektu TableAdapter použijete počáteční dotaz nebo uloženou proceduru k definování schématu přidruženého DataTableobjektu TableAdapter . Tento počáteční dotaz nebo uloženou proceduru spustíte voláním metody TableAdapter Fill (která vyplní přidružené DataTableTableAdapter ). Všechny změny provedené v hlavním dotazu TableAdapter se projeví ve schématu přidružené tabulky dat. Například odebrání sloupce z hlavního dotazu odebere také sloupec z přidružené tabulky dat. Pokud některé další dotazy v objektu TableAdapter používají příkazy SQL, které vracejí sloupce, které nejsou v hlavním dotazu, návrhář se pokusí synchronizovat změny sloupce mezi hlavním dotazem a dalšími dotazy.

Příkazy update TableAdapter

Funkce aktualizace objektu TableAdapter závisí na tom, kolik informací je k dispozici v hlavním dotazu v Průvodci objektem TableAdapter. Například objekty TableAdapter, které jsou nakonfigurované tak, aby načítály hodnoty z více tabulek (pomocí JOIN), skalárních hodnot, zobrazení nebo výsledků agregačních funkcí, nejsou původně vytvořeny s možností odesílat aktualizace zpět do podkladové databáze. Příkazy INSERTa příkazy UPDATEDELETE však můžete nakonfigurovat ručně v okně Vlastnosti.

TableAdapter – dotazy

TableAdapter with multiple queries

Objekty TableAdapter mohou obsahovat více dotazů k vyplnění přidružených datových tabulek. Objektu TableAdapter lze definovat tolik dotazů, kolik vyžaduje vaše aplikace, pokud každý dotaz vrací data, která odpovídají stejnému schématu jako jeho přidružená tabulka dat. Tato funkce umožňuje, aby TableAdapter načetl různé výsledky na základě různých kritérií.

Pokud například vaše aplikace obsahuje tabulku se jmény zákazníků, můžete vytvořit dotaz, který vyplní tabulku všemi jmény zákazníků, které začínají určitým písmenem, a další, která vyplní tabulku všemi zákazníky umístěnými ve stejném stavu. Customers Pokud chcete vyplnit tabulku se zákazníky v daném stavu, můžete vytvořit FillByState dotaz, který vezme parametr pro hodnotu stavu následujícím způsobem: SELECT * FROM Customers WHERE State = @State. Dotaz spustíte voláním FillByState metody a předáním hodnoty parametru takto: CustomerTableAdapter.FillByState("WA").

Kromě přidávání dotazů, které vracejí data stejného schématu jako tabulka dat TableAdapter, můžete přidat dotazy, které vracejí skalární (jednoduché) hodnoty. Například dotaz, který vrací počet zákazníků (SELECT Count(*) From Customers) je platný, CustomersTableAdapter, i když vrácená data neodpovídají schématu tabulky.

ClearBeforeFill – vlastnost

Ve výchozím nastavení se při každém spuštění dotazu, který vyplní tabulku dat TableAdapter, vymažou se stávající data a do tabulky se načtou jenom výsledky dotazu. Vlastnost TableAdapter ClearBeforeFill nastavte false , pokud chcete přidat nebo sloučit data vrácená z dotazu na existující data v tabulce dat. Bez ohledu na to, jestli vymažete data, musíte explicitně odesílat aktualizace zpět do databáze, pokud je chcete zachovat. Nezapomeňte proto před spuštěním dalšího dotazu, který vyplní tabulku, uložit všechny změny dat v tabulce. Další informace naleznete v tématu Aktualizace dat pomocí TableAdapter.

Dědičnost objektů TableAdapter

Objekty TableAdapter rozšiřují funkčnost standardních datových adaptérů zapouzdřením nakonfigurované DataAdapter třídy. Objekt TableAdapter ve výchozím nastavení dědí z Component třídy a nemůže být přetypován do DataAdapter třídy. Přetypování objektu TableAdapter do DataAdapter třídy způsobí InvalidCastException chybu. Chcete-li změnit základní třídu objektu TableAdapter, můžete určit třídu, která je odvozena z Componentvlastnosti Základní třída Objekt TableAdapter v Návrháři datových sad.

Metody a vlastnosti TableAdapter

Třída TableAdapter není typem .NET. To znamená, že ho nemůžete vyhledat v dokumentaci ani v prohlížeči objektů. Když použijete některého z dříve uvedených průvodců, vytvoří se v době návrhu. Název přiřazený k prvku TableAdapter při jeho vytvoření je založený na názvu tabulky, se kterou pracujete. Například při vytvoření TableAdapter založené na tabulce v databázi s názvem Orders, TableAdapter je pojmenován OrdersTableAdapter. Název třídy TableAdapter lze změnit pomocí Vlastnosti Name v Návrháři datové sady.

Tady jsou běžně používané metody a vlastnosti TableAdapter:

Člen Popis
TableAdapter.Fill Naplní tabulku dat přidruženou objektem TableAdapter výsledky příkazu TableAdapter SELECT .
TableAdapter.Update Odešle změny zpět do databáze a vrátí celé číslo, které představuje počet řádků ovlivněných aktualizací. Další informace naleznete v tématu Aktualizace dat pomocí TableAdapter.
TableAdapter.GetData Vrátí novou DataTable , která je vyplněná daty.
TableAdapter.Insert Vytvoří v tabulce dat nový řádek. Další informace naleznete v tématu Vložení nových záznamů do databáze.
TableAdapter.ClearBeforeFill Určuje, zda bude tabulka dat před voláním metody Fill vyprázdněna.

Metoda update TableAdapter

Objekty TableAdapter používají příkazy pro čtení a zápis dat z databáze. Jako základ pro vytvoření schématu přidružené tabulky dat a DeleteCommandInsertCommandUpdateCommandpříkazů přidružených k TableAdapter.Update metodě použijte počáteční Fill (hlavní) dotaz TableAdapter. Volání metody TableAdapter Update spustí příkazy vytvořené při původní konfiguraci TableAdapter, nikoli jeden z dalších dotazů, které jste přidali pomocí Průvodce konfigurací dotazu TableAdapter.

Když použijete TableAdapter, efektivně provádí stejné operace s příkazy, které byste obvykle provedli. Když například zavoláte metodu adaptéru Fill , spustí adaptér ve své SelectCommand vlastnosti datový příkaz a pomocí čtečky dat (například SqlDataReader) načte sadu výsledků do tabulky dat. Podobně když zavoláte metodu adaptéru Update , spustí příslušný příkaz (v objektu UpdateCommand, InsertCommanda DeleteCommand vlastnosti) pro každý změněný záznam v tabulce dat.

Poznámka:

Pokud v hlavním dotazu není k dispozici dostatek informací, příkazy InsertCommand, UpdateCommand a DeleteCommand jsou vytvořeny jako výchozí při generování objektu TableAdapter. Pokud je hlavní dotaz TableAdapter více než jeden příkaz tabulky SELECT , je možné, že návrhář nebude moct generovat InsertCommand, UpdateCommanda DeleteCommand. Pokud se tyto příkazy negenerují, může se při spuštění TableAdapter.Update metody zobrazit chyba.

Vlastnost GenerateDBDirectMethods třídy TableAdapter

Kromě InsertCommandobjektů TableAdapter , UpdateCommanda DeleteCommand, jsou vytvořeny pomocí metod, které lze spustit přímo proti databázi. Tyto metody (TableAdapter.Insert, TableAdapter.Updatea TableAdapter.Delete) můžete volat přímo pro manipulaci s daty v databázi. To znamená, že tyto jednotlivé metody můžete z kódu volat místo volání TableAdapter.Update pro zpracování vložení, aktualizací a odstranění čekajících na tabulku přidružených dat.

Pokud tyto přímé metody nechcete vytvořit, nastavte vlastnost GenerateDbDirectMethods objektu TableAdapter (falsev okně Properties). Další dotazy přidané do objektu TableAdapter jsou samostatné dotazy – negenerují tyto metody.

Podpora tableAdapter pro typy s možnou hodnotou null

TableAdapter podporují typy Nullable(Of T) s možnou hodnotou null a T?. Další informace otypech Další informace o typech s možnou hodnotou null v jazyce C# naleznete v tématu Použití typů s možnou hodnotou null.

Referenční dokumentace tableAdapterManager

Ve výchozím nastavení třída TableAdapterManager generuje při vytváření datové sady, která obsahuje související tabulky. Chcete-li zabránit generování třídy, změňte hodnotu Hierarchical Update vlastnosti datové sady na false. Když přetáhnete tabulku, která má relaci na návrhovou plochu stránky Windows Form nebo WPF, Visual Studio deklaruje členovou proměnnou třídy. Pokud nepoužíváte vazbu dat, musíte proměnnou deklarovat ručně.

Třída TableAdapterManager není typem .NET. Proto ho nemůžete vyhledat v dokumentaci. Vytvoří se v době návrhu jako součást procesu vytváření datové sady.

Níže jsou uvedené často používané metody a vlastnosti TableAdapterManager třídy:

Člen Popis
UpdateAll Metoda Uloží všechna data ze všech tabulek dat.
BackUpDataSetBeforeUpdate Vlastnost Určuje, zda se má před spuštěním TableAdapterManager.UpdateAll metody vytvořit záložní kopie datové sady. Boolean.
tableNameTableAdapter – vlastnost Představuje objekt TableAdapter. Vygenerovaný Objekt TableAdapterManager obsahuje vlastnost pro každou TableAdapter správu. Například datová sada s tabulkou Customers a Orders generuje pomocí Objektu TableAdapterManager, který obsahuje CustomersTableAdapter a OrdersTableAdapter vlastnosti.
UpdateOrder Vlastnost Řídí pořadí jednotlivých příkazů vložení, aktualizace a odstranění. Nastavte tuto hodnotu na jednu z hodnot v výčtu TableAdapterManager.UpdateOrderOption .

Ve výchozím nastavení je nastavena UpdateOrder na InsertUpdateDelete. To znamená, že se vloží, pak aktualizuje a pak odstraní pro všechny tabulky v datové sadě.

Zabezpečení

Pokud používáte datové příkazy s vlastností CommandType nastavenou na Text, pečlivě zkontrolujte informace odesílané z klienta před předáním do databáze. Uživatelé se zlými úmysly se mohou pokusit odeslat (vložit) upravené nebo další příkazy SQL ve snaze získat neoprávněný přístup nebo poškodit databázi. Před přenosem uživatelského vstupu do databáze vždy ověřte, zda jsou informace platné. Osvědčeným postupem je vždy používat parametrizované dotazy nebo uložené procedury, pokud je to možné.