TableAdapter – přehled
Objekty TableAdapter umožňují komunikaci mezi aplikací a databází.Konkrétně se objekt TableAdapter připojí k databázi, spustí dotaz nebo uloženou proceduru a buď vrátí novou tabulku s vrácenými daty nebo vrácenými daty naplní stávající objekt DataTable.Objekty TableAdapter se také používají k odeslání dat z aplikace zpět do databáze.
Uživatelé předchozích verzí systému Visual Studio si mohou objekt TableAdapter představit jako objekt DataAdapter s integrovaným objektem pro připojení a možností obsahovat více dotazů.Každý dotaz přidaný do objektu TableAdapter je vystaven jako veřejná metoda, kterou lze volat jako jiné metody nebo funkce objektu.
Kromě standardních funkcí objektu DataAdapter, objekty TableAdapter poskytují další typové metody zapouzdřující dotazy, které sdílejí společné schéma s přidružením objektem DataTable.Jinými slovy lze mít tolik dotazů, kolik chcete, aby jich objekt TableAdapter měl, pokud vrací data vyhovující stejnému schématu.
V předchozí verzi systému Visual Studio byly datové adaptéry rozhraní ADO.NET použity pro komunikaci mezi aplikací a databází.Zatímco datové adaptéry jsou i nadále hlavní součástí poskytovatelů .NET Framework Data Providers, objekty TableAdapter jsou návrhářem vygenerované komponenty, které vylepšují funkce objektů DataAdapter.Objekty TableAdapter obvykle obsahují metody Fill a Update pro načítání a aktualizaci dat v databázi.
Objekty TableAdapter jsou vytvářeny pomocí Návrháře datových sad uvnitř silně typových datových sad.Objekty TableAdapter lze vytvořit při vytváření nové datové sady pomocí průvodce Průvodce konfigurací zdroje dat.Objekty TableAdater lze vytvořit v existujících objektech datových sad pomocí průvodce Průvodce nastavením TableAdapter nebo přetažením databázových objektů z Průzkumníku serveru do Návrháře datových sad.Další informace naleznete v tématu Postupy: Vytváření TableAdapters.
Zatímco objekty TableAdapter jsou navrženy pomocí Návrháře datových sad, generované třídy TableAdapter nejsou generovány jako vnořené třídy typu DataSet.Jsou umístěny v samostatných oborech názvů specifických pro každou datovou sadu.Například pokud máte datovou sadu s názvem NorthwindDataSet, typy TableAdapter spojené s typy DataTablev datové sadě NorthwindDataSet by měly být v oboru názvů NorthwindDataSetTableAdapters.Pro programový přístup k určitému typu TableAdapter musíte deklarovat novou instanci typu TableAdapter.Příklad:
Dim northwindDataSet As New NorthwindDataSet()
Dim customersTableAdapter As New NorthwindDataSetTableAdapters.CustomersTableAdapter()
customersTableAdapter.Fill(northwindDataSet.Customers)
NorthwindDataSet northwindDataSet = new NorthwindDataSet();
NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter =
new NorthwindDataSetTableAdapters.CustomersTableAdapter();
customersTableAdapter.Fill(northwindDataSet.Customers);
Přidružené schéma objektu DataTable
Při vytváření objektu TableAdapter se počáteční dotaz nebo uložená procedura použije k definování schématu objektu DataTable spojeného s tímto objektem TableAdapter.Tento počáteční dotaz nebo uloženou proceduru provedete voláním hlavní metody Fill objektu TableAdapter (která naplní objekt DataTablepřidružený tomuto objektu TableAdapter).Jakékoli změny provedené v hlavním dotazu objektu TableAdapter se projeví ve schématu přidružené tabulky dat.Například odebrání sloupce z hlavního dotazu odebere sloupec z přidružené tabulky dat.Pokud jakékoliv další dotazy provedené na objektu TableAdapter používají příkazy jazyka SQL vracející sloupce, které nejsou v hlavním dotazu, pokusí se návrhář synchronizovat změny ve sloupcích mezi hlavním dotazem a jakýmikoliv dalšími dotazy.Další informace naleznete v tématu Postupy: Upravování TableAdapters.
Příkazy aktualizace objektu TableAdapter
Funkce aktualizace objektu TableAdapter je závislá na množství informací, které jsou k dispozici na základě hlavního dotazu zadaného v průvodci vytvořením objektu TableAdapter.Například objekty TableAdapter, které jsou nakonfigurovány k načtení hodnot z více tabulek (spojení), 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 databáze.Příkazy INSERT, UPDATE a DELETE však lze nakonfigurovat ručně v okně Vlastnosti.
Objekt TableAdapter – dotazy
Na rozdíl od standardních datových adaptérů objekty TableAdapter mohou obsahovat několik dotazů k vyplnění jejich 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.To umožňuje načítání dat, která splňují odlišná kritéria.Například pokud vaše aplikace obsahuje tabulku zákazníků, lze vytvořit dotaz, který tuto tabulku vyplní všemi zákazníky, jejichž jméno začíná určitým písmenem a další dotaz, který tuto tabulku vyplní všemi zákazníky nacházejícími se ve stejném státě.Chcete-li tabulku Customers vyplnit zákazníky v daném státě, můžete vytvořit dotaz FillByState, který přijímá parametr pro hodnotu státu: SELECT * FROM Customers WHERE State = @State.Dotaz spustíte voláním metody FillByState a předáním hodnoty jejího parametru, například CustomerTableAdapter.FillByState("WA").Další informace naleznete v tématu Postupy: Vytváření dotazů TableAdapter.
Kromě dotazů, které vracejí data stejného schématu jako tabulka dat objektu TableAdapter, lze přidat dotazy, které vracejí skalární hodnoty.Například vytvoření dotazu, který vrací počet zákazníků (SELECT Count(*) From Customers) je pro objekt CustomersTableAdapter platný, ačkoliv vrácená data neodpovídají schématu jeho tabulky.
Vlastnost ClearBeforeFill
Třída TableAdapter přidá vlastnost, která není k dispozici základní třídě DataAdapter.Ve výchozím nastavení jsou při každém spuštění dotazu k vyplnění tabulky dat objektu TableAdapter jeho data odstraněny a načteny pouze výsledky dotazu.Pokud budete chtít přidat nebo sloučit data vrácená dotazem s existujícími daty v tabulce dat, nastavte vlastnost ClearBeforeFill objektu TableAdapter na hodnotu false.Bez ohledu na to, zda tato data odstraníte, je v případě potřeby nutné explicitní odeslání aktualizací zpět do databáze.Proto nezapomeňte uložit všechny změny provedené v datech tabulky před provedením dalšího dotazu, který tuto tabulku naplní.Další informace naleznete v tématu Postupy: Aktualizace dat pomocí TableAdapter.
Dědičnost třídy TableAdapter
Objekty TableAdapter rozšiřují funkce standardních datových adaptérů zapouzdřením nakonfigurovaného objektu DataAdapter.Třída TableAdapter standardně dědí z třídy Component a nelze ji převést na třídu DataAdapter.Převedení objektu typu TableAdapter na typ DataAdapter skončí výjimkou InvalidCastException.Chcete-li změnit základní třídu třídy TableAdapter, lze zadat třídu odvozenou z třídy Component jako vlastnost Základní třída objektu TableAdapter v Návrháři datových sad.
Vlastnosti a metody třídy TableAdapter
Třída TableAdapter není součástí rozhraní .NET Framework a proto ji nelze vyhledat v dokumentaci nebo v Prohlížeči objektů.Je vytvořena v době návrhu při použití jednoho z výše uvedených průvodců.Název přiřazený objektu typu TableAdapter při jeho vytvoření vychází z názvu tabulky, se kterou právě pracujete.Například při vytvoření objektu typu TableAdapter založeném na tabulce v databázi s názvem Orders, bude tento objekt typu TableAdapter pojmenován OrdersTableAdapter.Název třídy TableAdapter lze změnit pomocí vlastnosti Jméno v Návrháři datových sad.
Zde jsou uvedeny běžně používané metody a vlastnosti třídy TableAdapter:
Člen |
Description |
---|---|
TableAdapter.Fill |
Naplní datovou tabulku přidruženou objektu TableAdapter výsledky příkazu SELECT objektu TableAdapter.Další informace naleznete v tématu Postupy: Vyplnění datové sady daty. |
TableAdapter.Update |
Odešle změny zpět do databáze a vrátí celé číslo představující počet řádků, které byly touto aktualizací ovlivněny.Další informace naleznete v tématu Postupy: Aktualizace dat pomocí TableAdapter. |
TableAdapter.GetData |
Vrátí nový objekt DataTable naplněný daty. |
TableAdapter.Insert |
Vytvoří nový řádek v tabulce dat.Další informace naleznete v tématu Postupy: Přidávání řádků do DataTable. |
TableAdapter.ClearBeforeFill |
Určuje, zda bude tabulka dat před voláním metody Fill vyprázdněna. |
Metoda Update třídy TableAdapter
Objekty TableAdapter používají příkazy pro čtení a zápis dat z databáze.Počáteční (hlavní) dotaz metody Fill objektu TableAdapter slouží jako základ pro vytvoření schématu přidružené tabulky dat, stejně jako příkazy InsertCommand, UpdateCommand a DeleteCommand přidružené metodě TableAdapter.Update.To znamená, že volání metody Update objektu TableAdapter provede příkazy vytvořené, když byl objekt TableAdapter původně nakonfigurován a nikoli některé z dalších dotazů přidaných pomocí Průvodce konfigurace dotazů objektu TableAdapter.
Objekt TableAdapter efektivně provede stejné operace s příkazy, které byste obvykle provedli.Například při volání metody Fill adaptér spustí datový příkaz ve své vlastnosti SelectCommand a použije čtečku dat (například typ SqlDataReader) k načtení sady výsledků do tabulky dat.Podobně, když zavoláte metodu Update adaptéru, je spuštěn příslušný příkaz ( ve vlastnosti UpdateCommand, InsertCommand nebo DeleteCommand ) 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 objektu TableAdapter více než jen příkaz SELECT z jedné tabulky, je možné, že návrhář nebude schopen příkazy InsertCommand, UpdateCommand a DeleteCommand vygenerovat.Pokud tyto příkazy nejsou vygenerovány, může se při provádění metody TableAdapter.Update zobrazit chyba.
Vlastnost GenerateDBDirectMethods třídy TableAdapter
Kromě příkazů InsertCommand, UpdateCommand a DeleteCommand jsou objekty TableAdapter vytvořeny s metodami, které mohou být provedeny přímo v databázi.Tyto metody (TableAdapter.Insert, TableAdapter.Update a TableAdapter.Delete) lze volat přímo pro manipulaci s daty v databázi.To znamená, že tyto metody lze volat z vašeho kódu namísto volání metody Update objektu TableAdapter pro vložení, aktualizace a odstranění, které čekají na přidruženou tabulku dat.
Pokud tyto přímé metody vytvořit nechcete, nastavte vlastnost GenerateDbDirectMethods objektu TableAdapter na hodnotu false ( v okně Vlastnosti ).Další dotazy přidané do objektu TableAdapter jsou samostatné dotazy a tyto metody nejsou generovány.
Třída TableAdapter podporuje typy s možnou hodnotou null
Třída TableAdapter podporuje typy s možnou hodnotou null Nullable(Of T) a T?.Další informace o typech s možnou hodnotou null v jazyce Visual Basic naleznete v tématu Typy hodnot s povolenou hodnotou Null (Visual Basic).Další informace o typech s možnou hodnotou null v jazyce C# naleznete v tématu Použití typů s povolenou hodnotou Null (Průvodce programováním v C#).
Viz také
Úkoly
Postupy: Připojování k datům v databázi
Návod: Připojování k datům v databázi (Windows Forms)
Koncepty
Příprava vaší aplikace k příjmu dat
Vázání ovládacích prvků k datům v sadě Visual Studio
Upravování dat ve vaší aplikaci