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:
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í.
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
, UpdateCommand
a 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
, InsertCommand
a 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
, UpdateCommand
a 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
, UpdateCommand
a DeleteCommand
, TableAdapter jsou vytvořeny pomocí následujících metod, které můžete spustit přímo s databází: TableAdapter.Insert
, TableAdapter.Update
a 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.UpdateAll method.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é.