Sdílet prostřednictvím


Návod: Vytvoření vícevrstvé datové aplikace s ADO.NET a rozhraním .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. 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í.

N-vrstvé datové aplikace jsou aplikace, které přistupují k datům a jsou oddělené do několika logických vrstev nebo vrstev. Oddělení komponent aplikace do samostatných vrstev zvyšuje udržovatelnost a škálovatelnost aplikace. To dělá tím, že umožňuje snadnější přijetí nových technologií, které se dají použít na jednu úroveň, aniž byste museli přepracovat celé řešení. N-úrovňová architektura zahrnuje prezentační vrstvu, střední vrstvu a datovou vrstvu. Střední vrstva obvykle zahrnuje vrstvu přístupu k datům, vrstvu obchodní logiky a sdílené komponenty, jako je ověřování a ověřování. Datová vrstva zahrnuje relační databázi. N-vrstvé aplikace obvykle ukládají citlivé informace do vrstvy přístupu k datům střední vrstvy, aby se zachovala izolace od koncových uživatelů, kteří přistupují k prezentační vrstvě. Další informace najdete v tématu Přehled n-vrstvých datových aplikací.

Jedním ze způsobů, jak oddělit různé vrstvy v n-vrstvé aplikaci, je vytvořit samostatné projekty pro každou vrstvu, kterou chcete zahrnout do aplikace. Typované datové sady obsahují DataSet Project vlastnost, která určuje, do kterých projektů se má vygenerovaná datová sada a TableAdapter kód přejít.

Tento názorný postup ukazuje, jak oddělit datovou sadu a TableAdapter kód do samostatných projektů knihovny tříd pomocí Návrháře datových sad. Po oddělení datové sady a kódu TableAdapter vytvoříte službu Windows Communication Foundation Services a Datové služby WCF ve službě Visual Studio pro volání do datové úrovně přístupu. Nakonec vytvoříte model Windows Forms aplikaci jako prezentační vrstvu. Tato úroveň přistupuje k datům z datové služby.

Během tohoto názorného postupu provedete následující kroky:

  • Vytvořte nové n-vrstvé řešení, které obsahuje více projektů.

  • Přidejte do n-vrstvého řešení dva projekty knihovny tříd.

  • Vytvořte typovou datovou sadu pomocí Průvodce konfigurací zdroje dat.

  • Oddělte vygenerované objekty TableAdapter a kód datové sady do samostatných projektů.

  • Vytvořte službu WCF (Windows Communication Foundation), která bude volat do datové úrovně přístupu.

  • Vytvořte ve službě funkce pro načtení dat z datové úrovně přístupu.

  • Vytvořte model Windows Forms aplikaci, která bude sloužit jako prezentační vrstva.

  • Vytvořte model Windows Forms ovládací prvky, které jsou vázané na zdroj dat.

  • Napište kód pro naplnění tabulek dat.

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.

  1. 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 vývoje desktopových aplikací .NET nebo jako jednotlivé komponenty.

  2. Následujícím postupem nainstalujte ukázkovou databázi Northwind:

    1. 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ů.

    2. Zkopírujte do schránky skript Northwind Transact-SQL. Tento skript T-SQL vytvoří zcela novou databázi Northwind a naplní ji daty.

    3. 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.

    1. 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.

      Pokud instanci LocalDB nevidíte, použijte tlačítko Přidat SQL Server na panelu nástrojů. Zobrazí se dialogové okno. V dialogovém okně rozbalte položku Místní a zvolte MSSQLLocalDB. Zadejte příslušné přihlašovací údaje. Pro databázi můžete ponechat výchozí volbu.

      Snímek obrazovky s dialogovým oknem Připojení do služby SQL Database

    2. Zvolte Připojit. Uzel se přidá pro LocalDB v SQL Serveru Průzkumník objektů.

    3. Klikněte pravým tlačítkem na instanci LocalDB a vyberte Nový dotaz.

      Otevře se okno editoru dotazů.

    4. Zkopírujte do schránky skript Northwind Transact-SQL. Tento skript T-SQL vytvoří zcela novou databázi Northwind a naplní ji daty.

    5. 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í n-vrstvého řešení a knihovny tříd pro uložení datové sady (DataEntityTier)

Prvním krokem tohoto názorného postupu je vytvoření řešení a dvou projektů knihovny tříd. První knihovna tříd obsahuje datovou sadu (vygenerovaná typová DataSet třída a datové tabulky, které obsahují data aplikace). Tento projekt se používá jako vrstva datové entity aplikace a obvykle se nachází ve střední vrstvě. Datová sada vytvoří počáteční datovou sadu a automaticky rozdělí kód do dvou knihoven tříd.

Poznámka:

Před kliknutím na tlačítko OK nezapomeňte projekt a řešení správně pojmenovat. Tím usnadníte dokončení tohoto návodu.

Vytvoření n-vrstvého řešení a knihovny tříd DataEntityTier

  1. V sadě Visual Studio vytvořte projekt pomocí šablony projektu model Windows Forms App (.NET Framework) pro C# nebo Visual Basic. .NET Core, .NET 5 a novější se nepodporují.

  2. Pojmenujte projekt DataEntityTier.

  3. Pojmenujte řešení NTierWalkthrough a pak zvolte OK.

    Vytvoří se řešení NTierWalkthrough obsahující projekt DataEntityTier a přidá se do Průzkumník řešení.

Vytvoření knihovny tříd pro uložení objektů TableAdapter (DataAccessTier)

Dalším krokem po vytvoření projektu DataEntityTier je vytvoření jiného projektu knihovny tříd. Tento projekt obsahuje vygenerované objekty TableAdapter a označuje se jako datová úroveň přístupu aplikace. Datová úroveň přístupu obsahuje informace potřebné pro připojení k databázi a obvykle se nachází ve střední vrstvě.

Vytvoření samostatné knihovny tříd pro objekty TableAdapter

  1. Klikněte pravým tlačítkem na řešení v Průzkumník řešení a zvolte Přidat>nový projekt.

  2. Zvolte šablonu projektu Knihovna tříd (.NET Framework).

  3. Pojmenujte projekt DataAccessTier a zvolte OK.

    Projekt DataAccessTier se vytvoří a přidá do řešení NTierWalkthrough.

Vytvoření datové sady

Dalším krokem je vytvoření typové datové sady. Typy datových sad se vytvářejí s třídou datové sady (včetně DataTables tříd) i TableAdapter třídami v jednom projektu. (Všechny třídy jsou generovány do jednoho souboru.) Když datovou sadu a objekty TableAdapter rozdělíte do různých projektů, jedná se o třídu datové sady, která se přesune do jiného projektu, takže třídy ponecháte TableAdapter v původním projektu. Proto vytvořte datovou sadu v projektu, která nakonec bude obsahovat objekty TableAdapter (projekt DataAccessTier). Datovou sadu vytvoříte pomocí Průvodce konfigurací zdroje dat.

Poznámka:

Abyste mohli vytvořit připojení, musíte mít přístup k ukázkové databázi Northwind. Informace o tom, jak nastavit ukázkovou databázi Northwind, najdete v tématu Postupy: Instalace ukázkových databází.

Vytvoření datové sady

  1. V Průzkumník řešení vyberte DataAccessTier.

  2. V nabídce Data vyberte Zobrazit zdroje dat.

    Otevře se okno Zdroje dat.

  3. V okně Zdroje dat vyberte Přidat nový zdroj dat a spusťte Průvodce konfigurací zdroje dat.

  4. Na stránce Zvolit typ zdroje dat vyberte Databáze a pak vyberte Další.

  5. Na stránce Zvolit data Připojení ion proveďte jednu z následujících akcí:

    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í ion otevřete dialogové okno Přidat Připojení ion.

  6. Pokud databáze vyžaduje heslo, vyberte možnost zahrnout citlivá data a pak zvolte Další.

    Poznámka:

    Pokud jste vybrali soubor místní databáze (místo připojení k SQL Serveru), může se zobrazit dotaz, jestli chcete soubor přidat do projektu. Chcete-li přidat soubor databáze do projektu, zvolte Ano .

  7. Na stránce Konfigurační soubor aplikace vyberte Další na stránce Uložit řetězec Připojení ionu.

  8. Rozbalte uzel Tabulky na stránce Zvolit databázové objekty.

  9. Zaškrtněte políčka pro tabulky Zákazníci a Objednávky a pak zvolte Dokončit.

    NorthwindDataSet se přidá do projektu DataAccessTier a zobrazí se v okně Zdroje dat.

Oddělení objektů TableAdapter od datové sady

Po vytvoření datové sady oddělte vygenerovanou třídu datové sady od tableAdapterů. Provedete to nastavením vlastnosti DataSet Project na název projektu, do kterého chcete uložit oddělenou třídu datové sady.

Oddělení objektů TableAdapter od objektu DataSet

  1. Poklikáním na NorthwindDataSet.xsd v Průzkumník řešení otevřete datovou sadu v Návrháři datových sad.

  2. Vyberte prázdnou oblast v návrháři.

  3. V okně Vlastnosti vyhledejte uzel projektu datové sady.

  4. V seznamu projektu datové sady vyberte DataEntityTier.

  5. V nabídce Sestavení vyberte Sestavit řešení.

    Datová sada a Objekty TableAdapter jsou rozděleny do dvou projektů knihovny tříd. Projekt, který původně obsahoval celou datovou sadu (DataAccessTier) teď obsahuje pouze objekty TableAdapter. Projekt určený ve vlastnosti Projektu datové sady (DataEntityTier) obsahuje typovou datovou sadu: NorthwindDataSet.Dataset.Designer.vb (nebo NorthwindDataSet.Dataset.Designer.cs).

Poznámka:

Když rozdělíte datové sady a objekty TableAdapter (nastavením vlastnosti Projektu datové sady), stávající částečné třídy datových sad v projektu se automaticky nepřesouvají. Stávající částečné třídy datové sady se musí ručně přesunout do projektu datové sady.

Vytvoření nové aplikace služby

Tento názorný postup ukazuje, jak získat přístup k datové vrstvě pomocí služby WCF, takže vytvoříme novou aplikaci služby WCF.

Vytvoření nové aplikace služby WCF

  1. Klikněte pravým tlačítkem na řešení v Průzkumník řešení a zvolte Přidat>nový projekt.

  2. V dialogovém okně Nový projekt v levém podokně vyberte WCF. V prostředním podokně vyberte knihovnu služeb WCF.

  3. Pojmenujte projekt DataService a vyberte OK.

    Projekt DataService se vytvoří a přidá do řešení NTierWalkthrough.

Vytvoření metod ve vrstvě přístupu k datům pro vrácení dat zákazníků a objednávek

Datová služba musí volat dvě metody ve vrstvě přístupu k datům: GetCustomers a GetOrders. Tyto metody vrátí northwind Customers a Orders tabulky. Vytvořte v projektu metody GetCustomers a GetOrders metody DataAccessTier .

Vytvoření metody, která vrací tabulku Customers, ve vrstvě přístupu k datům

  1. V Průzkumník řešení poklikejte na NorthwindDataset.xsd a otevřete datovou sadu.

  2. Klepněte pravým tlačítkem myši CustomersTableAdapter a klepněte na tlačítko Přidat dotaz.

  3. Na stránce Zvolit typ příkazu ponechte výchozí hodnotu příkazů Use SQL a klikněte na Další.

  4. Na stránce Zvolit typ dotazu ponechte výchozí hodnotu SELECT, která vrací řádky, a klikněte na Tlačítko Další.

  5. Na stránce Zadat příkaz SQL SELECT ponechte výchozí dotaz a klikněte na Tlačítko Další.

  6. Na stránce Zvolit metody k vygenerování zadejte GetCustomers pro název metody v části Return a DataTable.

  7. Klikněte na Finish (Dokončit).

Vytvoření metody, která vrací tabulku Orders, ve vrstvě přístupu k datům

  1. Klepněte pravým tlačítkem myši OrdersTableAdapter a klepněte na příkaz Přidat dotaz.

  2. Na stránce Zvolit typ příkazu ponechte výchozí hodnotu příkazů Use SQL a klikněte na Další.

  3. Na stránce Zvolit typ dotazu ponechte výchozí hodnotu SELECT, která vrací řádky, a klikněte na Tlačítko Další.

  4. Na stránce Zadat příkaz SQL SELECT ponechte výchozí dotaz a klikněte na Tlačítko Další.

  5. Na stránce Zvolit metody k vygenerování zadejte GetOrders pro název metody v oddílu Return a DataTable.

  6. Klikněte na Finish (Dokončit).

  7. V nabídce Sestavení klikněte na Sestavit řešení.

Přidání odkazu na datovou entitu a vrstvy přístupu k datům do datové služby

Vzhledem k tomu, že datová služba vyžaduje informace z datové sady a objektů TableAdapter, přidejte odkazy na projekty DataEntityTier a DataAccessTier .

Přidání odkazů do datové služby

  1. Klikněte pravým tlačítkem na DataService v Průzkumník řešení a klikněte na Přidat odkaz.

  2. Klikněte na kartu Projekty v dialogovém okně Přidat odkaz.

  3. Vyberte projekty DataAccessTier i DataEntityTier.

  4. Klikněte na OK.

Přidání funkcí do služby pro volání metod GetCustomers a GetOrders ve vrstvě přístupu k datům

Teď, když datová úroveň přístupu obsahuje metody pro vrácení dat, vytvořte metody v datové službě pro volání metod v datové vrstvě přístupu.

Poznámka:

Pro projekty jazyka C# je nutné přidat odkaz na System.Data.DataSetExtensions sestavení, aby se následující kód zkompiloval.

Vytvoření funkcí GetCustomers a GetOrders v datové službě

  1. V projektu DataService poklikejte na IService1.vb nebo IService1.cs.

  2. Do komentáře k přidání operací služby přidejte následující kód:

    [OperationContract]
    DataEntityTier.NorthwindDataSet.CustomersDataTable GetCustomers();
    
    [OperationContract]
    DataEntityTier.NorthwindDataSet.OrdersDataTable GetOrders();
    

    Poznámka:

    Kód pro tento kurz je k dispozici v jazyce C# a Visual Basic. Pokud chcete přepnout jazyk kódu na této stránce mezi jazykem C# a Visual Basicem, použijte přepínač jazyka kódu v horní části stránky na pravé straně.

  3. V projektu DataService poklikejte na Service1.vb (nebo Service1.cs).

  4. Do třídy Service1 přidejte následující kód:

    public DataEntityTier.NorthwindDataSet.CustomersDataTable GetCustomers()
    {
        DataAccessTier.NorthwindDataSetTableAdapters.CustomersTableAdapter
             CustomersTableAdapter1
            = new DataAccessTier.NorthwindDataSetTableAdapters.CustomersTableAdapter();
        return CustomersTableAdapter1.GetCustomers();
    }
    public DataEntityTier.NorthwindDataSet.OrdersDataTable GetOrders()
    {
        DataAccessTier.NorthwindDataSetTableAdapters.OrdersTableAdapter
             OrdersTableAdapter1
            = new DataAccessTier.NorthwindDataSetTableAdapters.OrdersTableAdapter();
        return OrdersTableAdapter1.GetOrders();
    }
    
  5. V nabídce Sestavení klikněte na Sestavit řešení.

Vytvoření prezentační vrstvy pro zobrazení dat z datové služby

Teď, když řešení obsahuje datovou službu s metodami, které volají do datové úrovně, vytvořte další projekt, který volá datovou službu a prezentuje data uživatelům. V tomto názorném postupu vytvořte model Windows Forms aplikaci. Toto je prezentační vrstva n-vrstvé aplikace.

Vytvoření projektu prezentační vrstvy

  1. Klikněte pravým tlačítkem na řešení v Průzkumník řešení a zvolte Přidat>nový projekt.

  2. V dialogovém okně Nový projekt vyberte v levém podokně možnost Plocha systému Windows. V prostředním podokně vyberte model Windows Forms Aplikace.

  3. Pojmenujte projekt PresentationTier a klepněte na tlačítko OK.

    Projekt PresentationTier se vytvoří a přidá do řešení NTierWalkthrough.

Nastavení projektu PresentationTier jako spouštěný projekt

Projekt PresentationTier nastavíme jako spouštěný projekt řešení, protože se jedná o skutečnou klientskou aplikaci, která prezentuje data a komunikuje s nimi.

Nastavení nového projektu prezentační vrstvy jako spouštěný projekt

  • V Průzkumník řešení klepněte pravým tlačítkem na PresentationTier a klepněte na příkaz Nastavit jako počáteční projekt.

Přidání odkazů do prezentační vrstvy

Klientská aplikace PresentationTier vyžaduje, aby služba odkaz na datovou službu byla přístup k metodám ve službě. Kromě toho se vyžaduje odkaz na datovou sadu, aby bylo možné povolit sdílení typů službou WCF. Dokud nepovolíte sdílení typů prostřednictvím datové služby, kód přidaný do částečné třídy datové sady není k dispozici pro prezentační vrstvu. Vzhledem k tomu, že obvykle přidáváte kód, například ověřovací kód, do řádků a sloupců měníte události tabulky dat, je pravděpodobné, že budete chtít získat přístup k tomuto kódu z klienta.

Přidání odkazu do prezentační vrstvy

  1. V Průzkumník řešení klikněte pravým tlačítkem myši PresentationTier a vyberte Přidat odkaz.

  2. V dialogovém okně Přidat odkaz vyberte kartu Projekty .

  3. Vyberte DataEntityTier a zvolte OK.

Přidání odkazu na službu do prezentační vrstvy

  1. V Průzkumník řešení klepněte pravým tlačítkem myši PresentationTier a vyberte Přidat odkaz služby.

  2. V dialogovém okně Přidat odkaz na službu vyberte Zjistit.

  3. Vyberte Service1 a zvolte OK.

    Poznámka:

    Pokud máte v aktuálním počítači více služeb, vyberte službu, kterou jste vytvořili dříve v tomto návodu (služba, která obsahuje tyto GetCustomers a GetOrders metody).

Přidání DataGridViews do formuláře pro zobrazení dat vrácených datovou službou

Po přidání odkazu služby na datovou službu se automaticky vyplní okno Zdroje dat vrácenými službou.

Přidání dvou ovládacích prvků DataGridView vázaných na data do formuláře

  1. V Průzkumník řešení vyberte projekt PresentationTier.

  2. V okně Zdroje dat rozbalte NorthwindDataSet a vyhledejte uzel Zákazníci.

  3. Přetáhněte uzel Zákazníci na formulář 1.

  4. V okně Zdroje dat rozbalte uzel Zákazníci a vyhledejte související uzel Objednávky ( uzel Objednávky vnořený do uzlu Zákazníci ).

  5. Přetáhněte související uzel Objednávky do formuláře Form1.

  6. Obslužnou rutinu události vytvoříte Form1_Load poklikáním na prázdnou oblast formuláře.

  7. Do obslužné rutiny Form1_Load události přidejte následující kód.

    ServiceReference1.Service1Client DataSvc =
        new ServiceReference1.Service1Client();
    northwindDataSet.Customers.Merge(DataSvc.GetCustomers());
    northwindDataSet.Orders.Merge(DataSvc.GetOrders());
    

Zvětšení maximální velikosti zprávy povolené službou

Výchozí hodnota maxReceivedMessageSize není dostatečně velká pro uložení dat načtených z tabulek Customers a Orders tabulek. V následujících krocích zvýšíte hodnotu na 6553600. Změníte hodnotu v klientovi, která automaticky aktualizuje odkaz na službu.

Poznámka:

Nižší výchozí velikost je určená k omezení vystavení útokům doS (DoS). Další informace najdete na webu MaxReceivedMessageSize.

Zvýšení hodnoty maxReceivedMessageSize

  1. V Průzkumník řešení poklikejte na soubor app.config v projektu PresentationTier.

  2. Vyhledejte atribut maxReceivedMessageSize a změňte hodnotu na 6553600. Pokud položku nevidíte basicHttpBinding , přidejte ji jako v následujícím příkladu:

    <system.serviceModel>
     <bindings>
         <basicHttpBinding>
             <binding maxBufferSize="6553600" maxReceivedMessageSize="6553600" />
         </basicHttpBinding>
     </bindings>
    </system.serviceModel>
    

Testování aplikace

Spusťte aplikaci stisknutím klávesy F5. Data z tabulek Customers a Orders tabulek se načtou z datové služby a zobrazí se ve formuláři.

Další kroky

V závislosti na požadavcích vaší aplikace je několik kroků, které můžete chtít provést po uložení souvisejících dat v aplikaci založené na Systému Windows. Můžete například v této aplikaci provést následující vylepšení:

  • Přidejte do datové sady ověření.

  • Přidejte do služby další metody pro aktualizaci dat zpět do databáze.