Ukládání dat do databáze (více tabulek) 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í.
Jedním z nejběžnějších scénářů při vývoji aplikací je zobrazení dat ve formuláři v aplikaci pro Windows, úprava dat a odeslání aktualizovaných dat zpět do databáze. Tento názorný postup vytvoří formulář, který zobrazuje data ze dvou souvisejících tabulek a ukazuje, jak upravit záznamy a uložit změny zpět do databáze. Tento příklad používá Customers
tabulky z Orders
ukázkové databáze Northwind.
Data v aplikaci můžete uložit zpět do databáze voláním Update
metody TableAdapter. Když přetáhnete tabulky z okna Zdroje dat do formuláře, kód, který je nutný k ukládání dat, se automaticky přidá. Všechny další tabulky přidané do formuláře vyžadují ruční přidání tohoto kódu. Tento názorný postup ukazuje, jak přidat kód pro ukládání aktualizací z více tabulek.
Mezi úlohy znázorněné v tomto názorném postupu patří:
Vytvoření a konfigurace zdroje dat v aplikaci pomocí Průvodce konfigurací zdroje dat
Nastavení ovládacích prvků položek v okně Zdroje dat Další informace naleznete v tématu Nastavení ovládacího prvku, který se má vytvořit při přetažení z okna Zdroje dat.
Vytváření ovládacích prvků vázaných na data přetažením položek z okna Zdroje dat do formuláře
Úprava několika záznamů v každé tabulce v datové sadě
Úprava kódu tak, aby odesílala aktualizovaná data v datové sadě zpět do databáze.
Požadavky
K dokončení tohoto kurzu potřebujete úlohy vývoje desktopových aplikací .NET a ukládání a zpracování dat nainstalované v sadě Visual Studio. Pokud je chcete nainstalovat, otevřete Instalační program pro Visual Studio a zvolte Upravit (nebo Další>úpravy) vedle verze sady Visual Studio, kterou chcete upravit. Viz Úprava sady Visual Studio.
Tento názorný postup používá SQL Server Express LocalDB a ukázkovou databázi Northwind.
Pokud nemáte SQL Server Express LocalDB, nainstalujte ho buď ze stránky pro stažení SQL Serveru Express, nebo prostřednictvím Instalační program pro Visual Studio. V Instalační program pro Visual Studio můžete sql Server Express LocalDB nainstalovat jako součást úlohy ukládání a zpracování dat nebo jako jednotlivé komponenty.
Následujícím postupem nainstalujte ukázkovou databázi Northwind:
V sadě Visual Studio otevřete okno Průzkumník objektů SQL Serveru. (SQL Server Průzkumník objektů se instaluje jako součást úlohy ukládání a zpracování dat v Instalační program pro Visual Studio.) Rozbalte uzel SQL Serveru. Klikněte pravým tlačítkem na instanci LocalDB a vyberte Nový dotaz.
Otevře se okno editoru dotazů.
Zkopírujte do schránky skript Northwind Transact-SQL. Tento skript T-SQL vytvoří zcela novou databázi Northwind a naplní ji daty.
Vložte skript T-SQL do editoru dotazů a pak zvolte tlačítko Spustit .
Po krátké době se dotaz dokončí a vytvoří se databáze Northwind.
Vytvoření aplikace model Windows Forms
Vytvořte nový projekt aplikace model Windows Forms pro jazyk C# nebo Visual Basic. Pojmenujte projekt UpdateMultipleTablesWalkthrough.
Vytvoření zdroje dat
Tento krok vytvoří zdroj dat z databáze Northwind pomocí Průvodce konfigurací zdroje dat. Abyste mohli vytvořit připojení, musíte mít přístup k ukázkové databázi Northwind. Informace o nastavení ukázkové databáze Northwind naleznete v tématu Postupy: Instalace ukázkových databází.
V nabídce Data vyberte Zobrazit zdroje dat.
Otevře se okno Zdroje dat.
V okně Zdroje dat vyberte Přidat nový zdroj dat a spusťte Průvodce konfigurací zdroje dat.
Na obrazovce Zvolit typ zdroje dat vyberte Databázi a pak vyberte Další.
Na obrazovce Zvolit datové připojení udělejte jednu z těchto věcí:
Pokud je datové připojení k ukázkové databázi Northwind k dispozici v rozevíracím seznamu, vyberte ho.
nebo
Výběrem možnosti Nové připojení otevřete dialogové okno Přidat nebo upravit připojení .
Pokud vaše databáze vyžaduje heslo, vyberte možnost zahrnout citlivá data a pak vyberte Další.
V části Uložit připojovací řetězec do konfiguračního souboru aplikace vyberte Další.
Na obrazovce Zvolit databázové objekty rozbalte uzel Tabulky.
Vyberte tabulky Zákazníci a Objednávky a pak vyberte Dokončit.
Do projektu se přidá NorthwindDataSet a tabulky se zobrazí v okně Zdroje dat.
Nastavení ovládacích prvků, které se mají vytvořit
V tomto názorném postupu jsou data v Customers
tabulce v rozložení Podrobnosti , kde se data zobrazují v jednotlivých ovládacích prvcích. Data z Orders
tabulky jsou v rozložení mřížky , které se zobrazuje v ovládacím DataGridView prvku.
Nastavení typu přetažení pro položky v okně Zdroje dat
V okně Zdroje dat rozbalte uzel Zákazníci .
Na uzlu Zákazníci vyberte v seznamu ovládacích prvků podrobnosti a změňte ovládací prvek tabulky Zákazníci na jednotlivé ovládací prvky. Další informace naleznete v tématu Nastavení ovládacího prvku, který se má vytvořit při přetažení z okna Zdroje dat.
Vytvoření formuláře vázaného na data
Ovládací prvky vázané na data můžete vytvořit přetažením položek z okna Zdroje dat do formuláře.
Přetáhněte hlavní uzel Zákazníci z okna Zdroje dat do formuláře Form1.
Ovládací prvky vázané na data s popisnými popisky se zobrazí ve formuláři spolu s pruhem nástrojů (BindingNavigator) pro navigaci v záznamech. NorthwindDataSet,
CustomersTableAdapter
a BindingSourceBindingNavigator objeví se v zásobníku komponent.Přetáhněte související uzel Objednávky z okna Zdroje dat do formuláře Form1.
Poznámka:
Související uzel Objednávky se nachází pod sloupcem Fax a je podřízený uzel uzlu Zákazníci .
Ovládací DataGridView prvek a pruh nástrojů (BindingNavigator) pro navigaci záznamů se zobrazí ve formuláři. V zásobníku komponent se zobrazí a
OrdersTableAdapter
BindingSource zobrazí se.
Přidání kódu pro aktualizaci databáze
Databázi můžete aktualizovat voláním Update
metod objektů Customers a Orders TableAdapter. Ve výchozím nastavení se do kódu formuláře přidá obslužná rutina události pro tlačítkoBindingNavigator Uložit do kódu formuláře pro odesílání aktualizací do databáze. Tento postup upraví kód tak, aby odesílal aktualizace ve správném pořadí. Tím se eliminuje možnost zvýšit chyby referenční integrity. Kód také implementuje zpracování chyb zabalením volání aktualizace do bloku try-catch. Kód můžete upravit tak, aby vyhovoval potřebám vaší aplikace.
Poznámka:
Pro přehlednost tento návod nepoužívá transakci. Pokud ale aktualizujete dvě nebo více souvisejících tabulek, zahrňte do transakce veškerou logiku aktualizace. Transakce je proces, který zajišťuje, že všechny související změny databáze jsou úspěšné před potvrzením jakýchkoli změn. Další informace naleznete v tématu Transakce a souběžnost.
Přidání logiky aktualizace do aplikace
Vyberte tlačítko Uložit na kartě BindingNavigator. Otevře se Editor kódu pro obslužnou rutinu
bindingNavigatorSaveItem_Click
události.Nahraďte kód v obslužné rutině události pro volání
Update
metod souvisejících objektů TableAdapter. Následující kód nejprve vytvoří tři dočasné tabulky dat, které budou obsahovat aktualizované informace pro každou DataRowState (AddedDeleteda) a Modified). Aktualizace se spouští ve správném pořadí. Kód by měl vypadat takto:this.Validate(); this.ordersBindingSource.EndEdit(); this.customersBindingSource.EndEdit(); NorthwindDataSet.OrdersDataTable deletedOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Deleted); NorthwindDataSet.OrdersDataTable newOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Added); NorthwindDataSet.OrdersDataTable modifiedOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Modified); try { // Remove all deleted orders from the Orders table. if (deletedOrders != null) { ordersTableAdapter.Update(deletedOrders); } // Update the Customers table. customersTableAdapter.Update(northwindDataSet.Customers); // Add new orders to the Orders table. if (newOrders != null) { ordersTableAdapter.Update(newOrders); } // Update all modified Orders. if (modifiedOrders != null) { ordersTableAdapter.Update(modifiedOrders); } northwindDataSet.AcceptChanges(); } catch (System.Exception ex) { MessageBox.Show("Update failed"); } finally { if (deletedOrders != null) { deletedOrders.Dispose(); } if (newOrders != null) { newOrders.Dispose(); } if (modifiedOrders != null) { modifiedOrders.Dispose(); } }
Testování aplikace
Stiskněte klávesu F5.
Proveďte určité změny dat jednoho nebo více záznamů v každé tabulce.
Vyberte tlačítko Uložit.
Zkontrolujte hodnoty v databázi a ověřte, že se změny uložily.