Sdílet prostřednictvím


Vyplnění datové sady pomocí TableAdapter

 

Publikováno: duben 2016

TableAdapter je komponenta, který vyplní data z databáze, datové sady založené na jeden nebo více dotazů nebo uložené procedury, které zadáte. Objekty TableAdapter lze provést také přidání, aktualizace a odstranění v databázi k zachování změn, které provedete do datové sady nebo vydat globální příkazy, které nesouvisí s konkrétní tabulkou.

Poznámka

Objekty TableAdapter jsou generovány návrháři aplikace Visual Studio. Pokud vytváříte datové sady prostřednictvím kódu programu, použijte modul DataAdapter, který je třída rozhraní .NET Framework.

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

Téma Popis
Vytvořit a konfigurovat objekty TableAdapter Jak používat návrháře vytvořit a konfigurovat objekty TableAdapter.
Vytváření parametrizovaných dotazů TableAdapter Jak povolit uživatelům zadat argumenty procedury TableAdapter nebo dotazy.
Přímý přístup k databázi pomocí TableAdapter Tom, jak pomocí metod TableAdapter Dbdirect.
Vypnutí omezení při naplňování datové sady Jak pracovat s omezení cizího klíče při aktualizaci dat.
How to extend the functionality of a TableAdapter Jak přidat vlastní kód do objektu TableAdapter.
Čtení dat XML do datové sady Jak pracovat s XML.

Objekty TableAdapter – přehled

Objekty TableAdapter jsou návrhářem vygenerované komponenty, které připojení k databázi, spustit dotazy nebo uložené procedury a jejich DataTable vyplnit vrácená data. Objekty TableAdapter se také používají k odesílání dat z aplikace zpět do databáze. Můžete mít tolik dotazů, kolik chcete na TableAdapter tak dlouho, dokud se vrátí data, která odpovídají do schématu tabulky, ke kterému je přiřazeno objektu TableAdapter. Následující diagram znázorňuje, jak objekty TableAdapter komunikovat s databází a dalších objektů v paměti:

Tok dat v klientské aplikaci

Zatímco objekty TableAdapter jsou navrženy pomocí Návrháře Dataset, 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 jednotlivé datové sady. Například, pokud máte datovou sadu s názvem NorthwindDataSet, objekty TableAdapter přidružené DataTables v NorthwindDataSet by měly být v NorthwindDataSetTableAdapters oboru názvů. Chcete-li získat přístup k určitému typu TableAdapter programově, musíte deklarovat novou instanci třídy TableAdapter. Příklad:

            NorthwindDataSet northwindDataSet = new NorthwindDataSet();

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

            customersTableAdapter.Fill(northwindDataSet.Customers);
        Dim northwindDataSet As New NorthwindDataSet()
        Dim customersTableAdapter As New NorthwindDataSetTableAdapters.CustomersTableAdapter()

        customersTableAdapter.Fill(northwindDataSet.Customers)

Přidružené schéma objektu DataTable

Při vytváření TableAdapter, počáteční dotaz nebo uložená procedura se používá k definování schématu objektu TableAdapter přidruženého DataTable. Spustit tento počáteční dotaz nebo uloženou proceduru voláním objektu TableAdapter Fill – Metoda (která naplní TableAdapter přidruženého DataTable). Všechny změny provedené v hlavním dotazu objektu TableAdapter se projeví ve schématu přidružené tabulky. Například odebráním sloupce z hlavního dotazu odeberete sloupec z přidružené tabulky. Pokud jakékoliv další dotazy na objektu TableAdapter používají příkazy jazyka SQL vracející sloupce, které nejsou v hlavním dotazu, Návrhář se pokusí 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 informace o tom, kolik je k dispozici podle hlavního dotazu zadaného v Průvodci vytvořením objektu TableAdapter. Například objekty TableAdapter, které jsou nakonfigurovány k načtení hodnoty 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. Nicméně lze nakonfigurovat ručně v příkazy INSERT, UPDATE a DELETE Vlastnosti okna.

TableAdapter – dotazy

Objekt TableAdapter s více dotazů

Objekty TableAdapter mohou obsahovat několik dotazů k vyplnění přidružených datových tabulek. Můžete definovat tolik dotazů TableAdapter vyžaduje vaše aplikace tak dlouho, dokud každý dotaz vrací data, která odpovídají stejnému schématu jako jeho přidružená data tabulky. 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ů, vytvoříte dotaz, který tabulku vyplní všemi zákazníky, jejichž jména začínají určitým písmenem a další dotaz, který vyplní tabulku s všichni zákazníci umístěn ve stejném státě. K vyplnění Customers tabulky se zákazníky v daném státě, můžete vytvořit FillByState dotaz, který přijímá parametr pro hodnotu státu: SELECT * FROM Customers WHERE State = @State. Dotaz spustíte voláním FillByState Metoda a předáním hodnoty parametru, například tato: CustomerTableAdapter.FillByState("WA").

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 platný pro CustomersTableAdapter i v případě, že vrácená data neodpovídají schématu příslušné tabulky.

Vlastnost ClearBeforeFill

Ve výchozím nastavení při každém spuštění dotazu k vyplnění tabulky dat objektu TableAdapter příslušná data odstraněna a jsou načteny pouze výsledky dotazu do tabulky. Nastavit TableAdapter ClearBeforeFill vlastnost false Pokud chcete přidat nebo sloučit data vrácená z dotazu na existující data v tabulce. Bez ohledu na to, zda tato data odstraníte je třeba explicitně odeslání aktualizací zpět do databáze, v případě potřeby. Proto nezapomeňte uložit všechny změny provedené před provedením dalšího dotazu, který vyplní tabulku s daty v tabulce. 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. Ve výchozím nastavení dědí TableAdapter z Component a nelze přetypovat DataAdapter třídy. Převedení objektu typu TableAdapter na DataAdapter vede InvalidCastException. Chcete-li změnit základní třídy TableAdapter, můžete zadat třídu, která je odvozena z Component v základní třídy vlastnost TableAdapter v Návrháře Dataset.

Vlastnosti a metody třídy TableAdapter

Třída TableAdapter není součástí .NET Framework, a jako taková jste ji nelze vyhledat v dokumentaci nebo Prohlížeč objektů. Je vytvořen v době návrhu, když použijete jednu 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 pracujete. Například při vytváření TableAdapter založeném na tabulce v databázi s názvem Orders, by se jmenovala TableAdapter OrdersTableAdapter. Název třídy TableAdapter lze změnit pomocí název vlastnost v Návrháře Dataset.

Níže jsou uvedeny běžně používané metody a vlastnosti třídy TableAdapter:

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

Metoda aktualizace třídy TableAdapter

Objekty TableAdapter používají příkazy data pro čtení a zápis z databáze. Počáteční TableAdapter Fill (hlavní) dotaz slouží jako základ pro vytvoření schématu přidružené tabulky, stejně jako InsertCommand, UpdateCommand, a DeleteCommand příkazy, které jsou přidružené k TableAdapter.Update Metoda. To znamená, že volání objektu TableAdapter Update Metoda provede příkazy vytvořené při TableAdapter původně byla nakonfigurována a není jednou z dalších dotazů přidané pomocí Průvodce nastavením dotazu TableAdapter.

Při použití TableAdapter efektivně provede stejné operace s příkazy, které byste obvykle provedli. Například při volání adaptéru Fill Metoda, adaptér spustí datový příkaz v jeho SelectCommand vlastnost a použije čtečku dat (například SqlDataReader) k načtení sady výsledků do tabulky dat. Podobně při volání adaptéru Update Metoda, spuštěn příslušný příkaz (v UpdateCommand, InsertCommand, a DeleteCommand Vlastnosti) pro jednotlivé změněné záznamy v tabulce data.

Poznámka

Pokud je dostatek informací v hlavním dotazu InsertCommand, UpdateCommand, a DeleteCommand příkazy jsou vytvořeny jako výchozí při generování objektu TableAdapter. Pokud hlavní TableAdapter dotazu je více než jedné tabulky příkaz SELECT, je možné, Návrhář nebude moci generovat InsertCommand, UpdateCommand, a DeleteCommand. Tyto příkazy nejsou vygenerovány, může zobrazit chybová při provádění TableAdapter.Update Metoda.

Vlastnost generatedbdirectmethods třídy TableAdapter

Kromě InsertCommand, UpdateCommand, a DeleteCommand, jsou objekty TableAdapter vytvořeny 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í TableAdapter.Update – pro zpracování vložení, aktualizace a odstranění, které čekají na vyřízení pro tabulku přidružená data.

Pokud nechcete tyto přímé metody vytvořit, nastavit TableAdapter GenerateDbDirectMethods vlastnost false (v Vlastnosti okno). Další dotazy přidané do objektu TableAdapter jsou samostatné dotazy – 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 povolenou hodnotou Null v jazyce Visual Basic, naleznete v části Typy hodnot s povolenou hodnotou Null. Další informace o typech s povolenou hodnotou Null v jazyce C# naleznete v tématu Použití typů s povolenou hodnotou Null.

Zabezpečení

Při použití příkazů dat s CommandType vlastnost nastavena na hodnotu Text, pečlivě zkontrolujte informace, které se odesílá z klienta před jeho odesláním do databáze. Uživatelé se zlými úmysly se může pokusit o odesílání (Vložit) modified nebo další příkazy SQL ve snaze o získání neautorizovaného přístupu nebo poškození databáze. Před přenesete vstupu uživatele na databázi, je třeba vždy ověřit, že informace jsou platné. Osvědčeným postupem je vždy nutné použít parametrizované dotazy nebo uložené procedury, pokud je to možné.

Viz také

Datové sady nástrojů v sadě Visual Studio