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ě. 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:
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 INSERT
a příkazy UPDATE
DELETE
však můžete nakonfigurovat ručně v okně Vlastnosti.
TableAdapter – dotazy
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 Component vlastnosti 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 DeleteCommand
InsertCommand
UpdateCommand
pří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
, InsertCommand
a 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
, UpdateCommand
a 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ě InsertCommand
objektů TableAdapter , UpdateCommand
a DeleteCommand
, jsou vytvořeny pomocí metod, které lze spustit přímo proti databázi. Tyto metody (TableAdapter.Insert
, TableAdapter.Update
a 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 (false
v 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. Booleovský. |
tableName TableAdapter – 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é.