Sdílet prostřednictvím


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. Tyto technologie 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ě. Kromě toho můžete vydávat 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 třídu .NET.

Pro podrobné informace o operacích TableAdapteru můžete přejít přímo na některý z těchto článků:

Článek Popis
Vytvoření a konfigurace objektů TableAdapter Naučte se používat návrháře k vytváření a konfiguraci objektů TableAdapter.
Vytvoření parametrizovaných dotazů TableAdapter Zjistěte, jak uživatelům povolit zadávání argumentů procedurám nebo dotazům TableAdapter.
Přistupujte přímo k databázi pomocí TableAdapter Naučte se používat metody DbDirect TableAdapterů.
Vypnutí omezení při vyplňování datové sady Zjistěte, jak při aktualizaci dat pracovat s omezeními cizího klíče.
Rozšíření funkčnosti TableAdapteru Naučte se přidávat vlastní kód do objektů TableAdapter.
čtení dat XML do datové sady Naučte se pracovat s daty XML v datové sadě.

Přehled TableAdapteru

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 spustit libovolný počet dotazů, pokud vrací data, která odpovídají schématu přidružené tabulky. Následující diagram ukazuje, jak Objekty TableAdapter pracují s databázemi a dalšími objekty v paměti:

Diagram znázorňující tok dat TableAdapter v klientské aplikaci

Ačkoli Objekty TableAdapter jsou navrženy pomocí Návrháře datových sad, třídy TableAdapter nejsou generovány jako vnořené třídy DataSet. Místo toho se nacházejí 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, TableAdaptery spojené s objekty DataTable v NorthwindDataSet jsou v oboru názvů NorthwindDataSetTableAdapters. Chcete-li získat přístup k určitému Objektu TableAdapter programově, deklarujte novou instanci TableAdapter třídy. Napří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 objektu TableAdapter DataTable. Tento počáteční dotaz nebo uloženou proceduru spustíte voláním metody Fill TableAdapter, která vyplní přidruženou DataTableTableAdapter . Všechny změny provedené v hlavním dotazu TableAdapter se projeví ve schématu přidružené tabulky dat. Pokud například odeberete sloupec z hlavního dotazu, Návrhář datových sad 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, pokusí se Návrhář datových sad 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 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. Avšak vlastnosti InsertCommand, UpdateCommanda DeleteCommand můžete nakonfigurovat ručně v okně Vlastnosti.

Dotazy TableAdapter

Objekty TableAdapter mohou obsahovat více dotazů k vyplnění přidružených datových tabulek. Můžete definovat tolik dotazů pro TableAdapter, kolik vyžaduje vaše aplikace, pokud každý dotaz vrací data, která odpovídají stejnému schématu jako 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í.

Diagram, který zobrazuje TableAdapter s více dotazy.

Pokud například vaše aplikace obsahuje tabulku se jmény zákazníků, můžete vytvořit dotaz, který vyplní tabulku každým jménem zákazníka, který začíná určitým písmenem. Můžete vytvořit další dotaz, který vyplní tabulku všemi zákazníky nacházejícími se ve stejném státě. Pokud chcete vyplnit Customers tabulku se zákazníky ve specifikovaném stavu, vytvořte FillByState dotaz, který vezme parametr pro hodnotu stavu následujícím způsobem: SELECT * FROM Customers WHERE State = @State. Spusťte dotaz voláním metody FillByState a předáním hodnoty parametru, například: 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ý pro 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. Pokud chcete přidat nebo sloučit data, která dotaz vrátí do existujících dat v tabulce dat, nastavte vlastnost TableAdapter ClearBeforeFill na false. Bez ohledu na to, jestli vymažete data, musíte aktualizace explicitně odeslat zpět do databáze, pokud je chcete zachovat. Před spuštěním jiného dotazu, který vyplní tabulku, proto nezapomeňte uložit všechny změny dat v tabulce. Další informace naleznete v tématu Aktualizace dat pomocí TableAdapter.

Dědičnost TableAdapter

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

Metody a vlastnosti TableAdapter

Třída TableAdapter není typem .NET, což znamená, že ji nemůžete vyhledat v prohlížeči objektů ani v referenční dokumentaci. Visual Studio ho vytvoří v době návrhu, když použijete některého z dříve popsaných průvodců. Název, který Visual Studio přiřadí k vytvořenému prvku TableAdapter, je založený na názvu tabulky, se kterou pracujete. Například při vytvoření TableAdapter na základě tabulky v databázi s názvem Orders, TableAdapter má název OrdersTableAdapter. Chcete-li změnit název třídy objektu TableAdapter, použijte vlastnost Název v okně Vlastnosti návrháře datové sady.

Běžně používané metody a vlastnosti TableAdapter jsou následující:

Č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 části Aktualizace dat pomocí TableAdapteru.
TableAdapter.GetData Vrátí novou DataTable naplněnou daty.
TableAdapter.Insert Vytvoří nový řádek v tabulce dat. Další informace naleznete v tématu Vložení nových záznamů do databáze.
TableAdapter.ClearBeforeFill Určuje, zda je tabulka dat vyprázdněna před voláním jedné z metod Fill.

Metoda update TableAdapter

Objekty TableAdapter používají datové příkazy ke čtení a zápisu z databáze. Jako základ pro vytvoření schématu přidružené tabulky dat použijte počáteční Fill (hlavní) dotaz TableAdapter a InsertCommand, UpdateCommanda DeleteCommand příkazy přidružené k metodě TableAdapter.Update. Když zavoláte metodu Update TableAdapter, spustí příkazy, které byly vytvořeny při původní konfiguraci TableAdapter, a ne 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é obvykle provádíte. Když například zavoláte metodu Fill adaptéru, spustí datový příkaz ve své vlastnosti SelectCommand a pomocí čtečky dat (například SqlDataReader) načte sadu výsledků do tabulky dat. Podobně když zavoláte metodu Update adaptéru, spustí příslušný příkaz (v UpdateCommand, InsertCommanda DeleteCommand vlastnosti) pro každý změněný záznam v tabulce dat.

Poznámka

Pokud hlavní dotaz obsahuje dostatek informací, návrhář vytvoří InsertCommand, UpdateCommanda DeleteCommand příkazy ve výchozím nastavení, když návrhář vygeneruje TableAdapter. Pokud je však hlavní dotaz TableAdapter více než jeden příkaz tabulky SELECT, návrhář pravděpodobně nebude moct tyto příkazy vygenerovat. V takovém případě se může při spuštění TableAdapter.Update metody zobrazit chyba.

TableAdapter GenerateDbDirectMethods

Kromě InsertCommand, UpdateCommanda DeleteCommand, TableAdapter jsou vytvořeny pomocí následujících metod, které můžete spustit přímo s databází: TableAdapter.Insert, TableAdapter.Updatea TableAdapter.Delete. Tyto metody můžete volat přímo pro manipulaci s daty v databázi. To znamená, že tyto jednotlivé metody můžete volat ze svého kódu, namísto volání TableAdapter.Update k řešení vložených, aktualizovaných a odstraněných položek čekajících u přidružené tabulky dat.

Pokud tyto přímé metody nechcete vytvářet, nastavte vlastnost TableAdapteru „GenerateDbDirectMethods“ na hodnotu „False“ v okně „Vlastnosti“. Další dotazy přidané do objektu TableAdapter jsou samostatné dotazy, které tyto metody negenerují.

Podpora TableAdapter pro nulovatelné typy

TableAdapter podporují typy s možnou hodnotou null Nullable<T> a T?. Další informace o typech s možnou hodnotou null v jazyce Visual Basic naleznete v tématu typy hodnot Nullable (Visual Basic). Další informace o nulovatelných typech v jazyce C# najdete v tématu nulovatelné hodnotové typy (C#).

Referenční dokumentace tableAdapterManager

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

Protože třída TableAdapterManager není typem .NET, nezobrazuje se v referenční dokumentaci. Visual Studio ji vytvoří v době návrhu v rámci procesu vytváření datové sady.

Následující tabulka uvádí často používané metody a vlastnosti třídy TableAdapterManager:

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

Ve výchozím nastavení je UpdateOrder nastavena na InsertUpdateDelete, což znamená, že vkládání, aktualizace a následné odstranění se provádí pro všechny tabulky v datové sadě.

Bezpečnost

Pokud používáte datové příkazy s vlastností CommandType nastavenou na Text, pečlivě zkontrolujte informace odeslané z klienta, než je předáte do databáze. Uživatelé se zlými úmysly se můžou pokusit odeslat (vložit) upravené nebo dodatečné příkazy SQL, aby získali neoprávněný přístup k 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 použít parametrizované dotazy nebo uložené procedury, pokud je to možné.