Delen via


Stapsgewijze handleiding: Een n-laags gegevensapplicatie maken met ADO.NET en .NET Framework

Opmerking

De DataSet klassen en gerelateerde klassen zijn verouderde .NET Framework-technologieën uit het begin van de jaren 2000 waarmee toepassingen met gegevens in het geheugen kunnen werken terwijl de apps losgekoppeld zijn van de database. De technologieën zijn vooral handig voor apps waarmee gebruikers gegevens kunnen wijzigen en de wijzigingen weer kunnen behouden in de database. Hoewel gegevenssets een bewezen succesvolle technologie zijn, is de aanbevolen aanpak voor nieuwe .NET-toepassingen het gebruik van Entity Framework Core. Entity Framework biedt een natuurlijkere manier om met tabelgegevens te werken als objectmodellen en heeft een eenvoudigere programmeerinterface.

Gegevenstoepassingen met N-lagen zijn toepassingen die toegang hebben tot gegevens en zijn gescheiden in meerdere logische lagen of lagen. Het scheiden van toepassingsonderdelen in afzonderlijke lagen verhoogt de onderhoudbaarheid en schaalbaarheid van de toepassing. Dit doet u door eenvoudigere acceptatie van nieuwe technologieën mogelijk te maken die op één laag kunnen worden toegepast zonder dat u de hele oplossing opnieuw hoeft te ontwerpen. Architectuur met N-lagen bevat een presentatielaag, een middelste laag en een gegevenslaag. De middelste laag bevat doorgaans een laag voor gegevenstoegang, een bedrijfslogicalaag en gedeelde onderdelen, zoals verificatie en validatie. De gegevenslaag bevat een relationele database. Toepassingen met N-lagen slaan doorgaans gevoelige informatie op in de gegevenstoegangslaag van de middelste laag om isolatie te behouden van eindgebruikers die toegang hebben tot de presentatielaag. Zie het overzicht van N-tier-gegevenstoepassingen voor meer informatie.

Eén manier om de verschillende lagen in een n-tier-toepassing te scheiden, is door afzonderlijke projecten te maken voor elke laag die u in uw toepassing wilt opnemen. Getypte gegevenssets bevatten een DataSet Project eigenschap die bepaalt in welke projecten de gegenereerde gegevensset en TableAdapter code moeten worden opgenomen.

In dit scenario ziet u hoe u gegevenssets en TableAdapter code kunt scheiden in afzonderlijke klassebibliotheekprojecten met behulp van de ontwerpfunctie voor gegevenssets. Nadat u de gegevensset en TableAdapter-code hebt gescheiden, maakt u een Windows Communication Foundation Services- en WCF Data Services-service in Visual Studio om de gegevenstoegangslaag aan te roepen. Ten slotte maakt u een Windows Forms-toepassing als presentatielaag. Deze laag heeft toegang tot gegevens uit de gegevensservice.

Tijdens deze doorloop voert u de volgende stappen uit:

  • Maak een nieuwe n-tier-oplossing die meerdere projecten bevat.

  • Voeg twee klassenbibliothekenprojecten toe aan de n-laags oplossing.

  • Maak een getypte gegevensset met behulp van de wizard Gegevensbronconfiguratie.

  • Scheid de gegenereerde TableAdapters en gegevenssetcode in afzonderlijke projecten.

  • Maak een WCF-service (Windows Communication Foundation) om de toegangslaag voor gegevens aan te roepen.

  • Maak functies in de service om gegevens op te halen uit de gegevenstoegangslaag.

  • Maak een Windows Forms-toepassing om te fungeren als de presentatielaag.

  • Windows Forms-besturingselementen maken die zijn gebonden aan de gegevensbron.

  • Schrijf code om de gegevenstabellen te vullen.

Vereiste voorwaarden

Voor het voltooien van deze zelfstudie hebt u de ontwikkel- en gegevensopslag- en verwerkingsworkloads van .NET nodig die zijn geïnstalleerd in Visual Studio. Als u deze wilt installeren, opent u Visual Studio Installer en kiest u Wijzigen (of Meer>Wijzigen) naast de versie van Visual Studio die u wilt wijzigen. Zie Visual Studio wijzigen.

In dit scenario worden SQL Server Express LocalDB en de Northwind-voorbeelddatabase gebruikt.

  1. Als u geen SQL Server Express LocalDB hebt, installeert u deze via de downloadpagina van SQL Server Express of via het installatieprogramma van Visual Studio. In het installatieprogramma van Visual Studio kunt u SQL Server Express LocalDB installeren als onderdeel van de ontwikkelworkload voor .NET-desktops of als een afzonderlijk onderdeel.

  2. Installeer de Northwind-voorbeelddatabase door de volgende stappen uit te voeren:

    1. Open in Visual Studio het venster SQL Server-objectverkenner. (SQL Server Object Explorer wordt geïnstalleerd als onderdeel van de werkbelasting voor gegevensopslag en -verwerking in het Installatieprogramma van Visual Studio.) Vouw het SQL Server-knooppunt uit. Klik met de rechtermuisknop op uw LocalDB-exemplaar en selecteer Nieuwe query.

      Als u het LocalDB-exemplaar niet ziet, gebruikt u de werkbalkknop SQL Server toevoegen. Het dialoogvenster wordt weergegeven. Vouw in het dialoogvenster Lokaal uit en kies MSSQLLocalDB. Voer de juiste referenties in. U kunt de standaardoptie voor de database laten staan.

      Schermopname van het dialoogvenster Verbinding maken met SQL Database

    2. Kies Verbinding maken. Er wordt een knooppunt toegevoegd voor LocalDB in SQL Server Object Explorer.

    3. Klik met de rechtermuisknop op uw LocalDB-exemplaar en selecteer Nieuwe query.

      Er wordt een venster van de queryeditor geopend.

    4. Kopieer het script Northwind Transact-SQL naar het klembord. Met dit T-SQL-script wordt de volledig nieuwe Northwind-database gemaakt en gevuld met gegevens.

    5. Plak het T-SQL-script in de queryeditor en kies vervolgens de knop uitvoeren.

      Na korte tijd wordt de query uitgevoerd en wordt de Northwind-database gemaakt.

Maak de n-tier-oplossing en klassebibliotheek voor het opslaan van de gegevensset (DataEntityTier)

De eerste stap van deze handleiding is het maken van een oplossing en twee klassenbibliotheekprojecten. De eerste klassebibliotheek bevat de gegevensset (de gegenereerde getypeerde DataSet klasse en DataTables die de gegevens van de toepassing bevatten). Dit project wordt gebruikt als de gegevensentiteitslaag van de toepassing en bevindt zich meestal in de middelste laag. De gegevensset creëert de aanvankelijke gegevensset en verdeelt de code automatisch over de twee classbibliotheken.

Opmerking

Zorg ervoor dat u het project en de oplossing correct noemt voordat u op OK klikt. Als u dit doet, is het voor u gemakkelijker om deze procedure te voltooien.

Om de n-tier-oplossing en de DataEntityTier-klassebibliotheek te maken

  1. Maak in Visual Studio een project met behulp van de Projectsjabloon Windows Forms App (.NET Framework) voor C# of Visual Basic. .NET Core, .NET 5 en hoger worden niet ondersteund.

  2. Geef het project de naam DataEntityTier.

  3. Noem de oplossing NTierWalkthrough en kies OK.

    Er wordt een NTierWalkthrough-oplossing met het DataEntityTier-project gemaakt en toegevoegd aan Solution Explorer.

Maak de klassebibliotheek om de TableAdapters op te slaan (DataAccessTier)

De volgende stap nadat u het DataEntityTier-project hebt gemaakt, is het maken van een ander klassebibliotheekproject. Dit project bevat de gegenereerde TableAdapters en wordt de gegevenstoegangslaag van de toepassing genoemd. De gegevenstoegangslaag bevat de informatie die nodig is om verbinding te maken met de database en zich doorgaans in de middelste laag bevindt.

Een afzonderlijke klassebibliotheek maken voor de TableAdapters

  1. Klik met de rechtermuisknop op de oplossing in Solution Explorer en kiesNieuw project>.

  2. Kies de projectsjabloon Class Library (.NET Framework).

  3. Geef het project de naam DataAccessTier en kies OK.

    Het DataAccessTier-project wordt gemaakt en toegevoegd aan de NTierWalkthrough-oplossing.

De gegevensset maken

De volgende stap bestaat uit het maken van een getypte gegevensset. Getypte gegevenssets worden gemaakt met zowel de gegevenssetklasse (inclusief DataTables klassen) als de TableAdapter klassen in één project. (Alle klassen worden gegenereerd in één bestand.) Wanneer u de gegevensset en TableAdapters scheidt in verschillende projecten, is dit de gegevenssetklasse die naar het andere project wordt verplaatst en de TableAdapter klassen in het oorspronkelijke project verlaten. Maak daarom de gegevensset in het project die uiteindelijk de TableAdapters (het DataAccessTier-project) bevat. U maakt de gegevensset met behulp van de wizard Gegevensbronconfiguratie.

Opmerking

U moet toegang hebben tot de Northwind-voorbeelddatabase om de verbinding te maken. Zie How to: Install sample databases (Voorbeelddatabases installeren) voor meer informatie over het instellen van de Northwind-voorbeelddatabase.

De gegevensset maken

  1. Selecteer de DataAccessTier in Solution Explorer.

  2. Selecteer Gegevensbronnen weergeven in het menu Gegevens.

    Het venster Gegevensbronnen wordt geopend.

  3. Selecteer In het venster Gegevensbronnende optie Nieuwe gegevensbron toevoegen om de wizard Configuratie van gegevensbron te starten.

  4. Selecteer Op de pagina Een gegevensbrontype kiezen de optie Database en selecteer vervolgens Volgende.

  5. Voer op de pagina Uw gegevensverbinding kiezen een van de volgende acties uit:

    Als een gegevensverbinding met de voorbeelddatabase Northwind beschikbaar is in de vervolgkeuzelijst, selecteert u deze.

    of

    Selecteer Nieuwe verbinding om het dialoogvenster Verbinding toevoegen te openen.

  6. Als voor de database een wachtwoord is vereist, selecteert u de optie voor het opnemen van gevoelige gegevens en kiest u Vervolgens.

    Opmerking

    Als u een lokaal databasebestand hebt geselecteerd (in plaats van verbinding te maken met SQL Server), wordt u mogelijk gevraagd of u het bestand aan het project wilt toevoegen. Kies Ja om het databasebestand toe te voegen aan het project.

  7. Selecteer Volgende op de pagina Verbindingsreeks opslaan in het Applicatieconfiguratiebestand.

  8. Vouw het knooppunt Tabellen uit op de pagina Databaseobjecten kiezen .

  9. Schakel de selectievakjes voor de tabellen Klanten en Orders in en kies Voltooien.

    NorthwindDataSet wordt toegevoegd aan het DataAccessTier-project en wordt weergegeven in het venster Gegevensbronnen .

Scheid de TableAdapters van de dataset

Nadat u de gegevensset hebt gemaakt, scheidt u de gegenereerde gegevenssetklasse van TableAdapters. U doet dit door de eigenschap DataSet Project in te stellen op de naam van het project waarin de gescheiden gegevenssetklasse moet worden opgeslagen.

Om de TableAdapters van het DataSet te scheiden

  1. Dubbelklik op NorthwindDataSet.xsd in Solution Explorer om de gegevensset te openen in de ontwerpfunctie voor gegevenssets.

  2. Selecteer een leeg gebied in de ontwerpfunctie.

  3. Zoek het DataSet Project-knooppunt in het venster Eigenschappen .

  4. Selecteer DataEntityTier in de lijst DataSet Project.

  5. Selecteer in het menu BuildBuild Solution.

    De gegevensset en TableAdapters zijn onderverdeeld in de twee class library-projecten. Het project dat oorspronkelijk de hele gegevensset (DataAccessTier) bevat, bevat nu alleen de TableAdapters. Het project dat is aangewezen in de eigenschap DataSet Project (DataEntityTier) bevat de getypte gegevensset: NorthwindDataSet.Dataset.Designer.vb (of NorthwindDataSet.Dataset.Designer.cs).

Opmerking

Wanneer u gegevenssets en TableAdapters scheidt (door de eigenschap DataSet Project in te stellen), worden bestaande gedeeltelijke gegevenssetklassen in het project niet automatisch verplaatst. Gedeeltelijke klassen van bestaande gegevenssets moeten handmatig worden verplaatst naar het gegevenssetproject.

Een nieuwe servicetoepassing maken

In dit overzicht ziet u hoe u toegang krijgt tot de gegevenstoegangslaag met behulp van een WCF-service. We gaan dus een nieuwe WCF-servicetoepassing maken.

Een nieuwe WCF-servicetoepassing maken

  1. Klik met de rechtermuisknop op de oplossing in Solution Explorer en kiesNieuw project>.

  2. Selecteer WCF in het dialoogvenster Nieuw project in het linkerdeelvenster. Selecteer in het middelste deelvenster WCF-servicebibliotheek.

  3. Geef het project de naam DataService en selecteer OK.

    Het DataService-project wordt gemaakt en toegevoegd aan de NTierWalkthrough-oplossing.

Methoden maken in de gegevenstoegangslaag om de klanten en ordergegevens te retourneren

De gegevensservice moet twee methoden aanroepen in de gegevenstoegangslaag: GetCustomers en GetOrders. Met deze methoden worden northwind Customers en Orders tabellen geretourneerd. Maak de GetCustomers en GetOrders methoden in het DataAccessTier project.

Een methode maken in de gegevenstoegangslaag die de tabel Klanten retourneert

  1. Dubbelklik in Solution Explorer op NorthwindDataset.xsd om de gegevensset te openen.

  2. Klik met de rechtermuisknop op CustomersTableAdapter en klik op Query toevoegen.

  3. Laat op de pagina Een opdrachttype kiezen de standaardwaarde van SQL-instructies gebruiken staan en klik op Volgende.

  4. Laat op de pagina Een querytype kiezen de standaardwaarde van SELECT staan die rijen retourneert en klik op Volgende.

  5. Laat op de pagina Een SQL SELECT-instructie opgeven de standaardquery staan en klik op Volgende.

  6. Typ op de pagina Methoden kiezen om te genererenGetCustomers voor de Methodenaam in de sectie Return a DataTable.

  7. Klik op Voltooien.

Een methode maken in de gegevenstoegangslaag die de tabel Orders retourneert

  1. Klik met de rechtermuisknop op OrdersTableAdapter en klik op Query toevoegen.

  2. Laat op de pagina Een opdrachttype kiezen de standaardwaarde van SQL-instructies gebruiken staan en klik op Volgende.

  3. Laat op de pagina Een querytype kiezen de standaardwaarde van SELECT staan die rijen retourneert en klik op Volgende.

  4. Laat op de pagina Een SQL SELECT-instructie opgeven de standaardquery staan en klik op Volgende.

  5. Op de pagina Methoden kiezen om te genereren, typ GetOrders voor de Naam van de methode in Return a DataTable sectie.

  6. Klik op Voltooien.

  7. Klik in het menu Bouwen op Oplossing bouwen.

Voeg een verwijzing naar de gegevensentiteit en de toegangsniveaus toe aan de gegevensservice.

Omdat de gegevensservice gegevens uit de gegevensset en TableAdapters vereist, voegt u verwijzingen toe aan de projecten DataEntityTier en DataAccessTier .

Verwijzingen toevoegen aan de gegevensservice

  1. Klik met de rechtermuisknop op DataService in Solution Explorer en klik op Verwijzing toevoegen.

  2. Klik op het tabblad Projecten in het dialoogvenster Verwijzing toevoegen .

  3. Selecteer zowel de DataAccessTier als DataEntityTier projecten.

  4. Klik op OK.

Voeg functies toe aan de service om de Methoden GetCustomers en GetOrders aan te roepen in de gegevenstoegangslaag

Nu de gegevenstoegangslaag de methoden bevat om gegevens te retourneren, maakt u methoden in de gegevensservice om de methoden in de gegevenstoegangslaag aan te roepen.

Opmerking

Voor C#-projecten moet u een verwijzing naar de System.Data.DataSetExtensions assembly toevoegen om de volgende code te kunnen compileren.

De functies GetCustomers en GetOrders maken in de gegevensservice

  1. Dubbelklik in het DataService-project op IService1.vb of IService1.cs.

  2. Voeg de volgende code toe onder de Voeg hier uw servicebewerkingen toe-opmerking:

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

    Opmerking

    De code voor deze zelfstudie is beschikbaar in C# en Visual Basic. Als u de codetaal op deze pagina wilt wijzigen tussen C# en Visual Basic, gebruikt u de codetaalwisselaar boven aan de pagina aan de rechterkant.

  3. Dubbelklik in het DataService-project op Service1.vb (of Service1.cs).

  4. Voeg de volgende code toe aan de klasse Service1 :

    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. Klik in het menu Bouwen op Oplossing bouwen.

Een presentatielaag maken om gegevens van de gegevensservice weer te geven

Nu de oplossing de gegevensservice bevat die methoden bevat die de gegevenstoegangslaag aanroepen, maakt u een ander project dat de gegevensservice aanroept en de gegevens aan gebruikers presenteert. Maak voor dit scenario een Windows Forms-toepassing; dit is de presentatielaag van de n-tier-toepassing.

Het presentatielaagproject maken

  1. Klik met de rechtermuisknop op de oplossing in Solution Explorer en kiesNieuw project>.

  2. Selecteer Windows Desktop in het dialoogvenster Nieuw project in het linkerdeelvenster. Selecteer Windows Forms App in het middelste deelvenster.

  3. Geef het project de naam PresentationTier en klik op OK.

    Het PresentationTier-project wordt gemaakt en toegevoegd aan de NTierWalkthrough-oplossing.

Het PresentationTier-project instellen als het opstartproject

We stellen het PresentationTier-project in op het opstartproject voor de oplossing, omdat dit de werkelijke clienttoepassing is die de gegevens presenteert en ermee communiceert.

Het nieuwe presentatielaagproject instellen als opstartproject

  • Klik in Solution Explorer met de rechtermuisknop op PresentationTier en klik op Instellen als opstartproject.

Verwijzingen toevoegen aan de presentatielaag

De clienttoepassing, PresentationTier vereist een servicereferentie naar de gegevensservice om toegang te krijgen tot de methoden in de service. Daarnaast is een verwijzing naar de gegevensset vereist voor het inschakelen van type-deling door de WCF-service. Totdat u het delen van typen via de gegevensservice inschakelt, is code die is toegevoegd aan de gedeeltelijke gegevenssetklasse niet beschikbaar voor de presentatielaag. Omdat u doorgaans code toevoegt, zoals validatiecode aan de rij- en kolom wijzigende gebeurtenissen van een gegevenstabel, is het waarschijnlijk dat u toegang wilt krijgen tot deze code vanaf de client.

Een verwijzing naar de presentatielaag toevoegen

  1. Klik in Solution Explorer met de rechtermuisknop op PresentationTier en selecteer Verwijzing toevoegen.

  2. Selecteer in het dialoogvenster Verwijzing toevoegen het tabblad Projecten .

  3. Selecteer DataEntityTier en kies OK.

Een servicereferentie toevoegen aan de presentatielaag

  1. Klik in Solution Explorer met de rechtermuisknop op PresentationTier en selecteer Serviceverwijzing toevoegen.

  2. Selecteer Ontdekken in het dialoogvenster Servicereferentie toevoegen.

  3. Selecteer Service1 en kies OK.

    Opmerking

    Als u meerdere services op de huidige computer hebt, selecteert u de service die u eerder in dit scenario hebt gemaakt (de service die de GetCustomers en GetOrders methoden bevat).

DataGridViews toevoegen aan het formulier om de gegevens weer te geven die door de gegevensservice worden geretourneerd

Nadat u de servicereferentie aan de gegevensservice hebt toegevoegd, wordt het venster Gegevensbronnen automatisch ingevuld met de gegevens die door de service worden geretourneerd.

Twee gegevensgebonden DataGridViews toevoegen aan het formulier

  1. Selecteer in Solution Explorer het project PresentationTier.

  2. Vouw NorthwindDataSet uit in het venster Gegevensbronnen en zoek het knooppunt Klanten.

  3. Verplaats het knooppunt Klanten naar Form1.

  4. Vouw in het venster Gegevensbronnen het knooppunt Klanten uit en zoek het gerelateerde knooppunt Orders (het knooppunt Orders genest in het knooppunt Klanten ).

  5. Sleep het gerelateerde knooppunt Orders naar Form1 toe.

  6. Maak een Form1_Load gebeurtenis-handler door te dubbelklikken op een leeg gebied van het formulier.

  7. Voeg de volgende code toe aan de Form1_Load gebeurtenis-handler.

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

De maximale berichtgrootte verhogen die is toegestaan door de service

De standaardwaarde voor maxReceivedMessageSize is niet groot genoeg om de gegevens op te halen uit de Customers en Orders tabellen. In de volgende stappen verhoogt u de waarde tot 6553600. U wijzigt de waarde op de client, waarmee de servicereferentie automatisch wordt bijgewerkt.

Opmerking

De lagere standaardgrootte is bedoeld om blootstelling aan DoS-aanvallen (Denial of Service) te beperken. Zie MaxReceivedMessageSize voor meer informatie.

De waarde maxReceivedMessageSize verhogen

  1. Dubbelklik in Solution Explorer op het bestandapp.config in het project PresentationTier .

  2. Zoek het kenmerk maxReceivedMessageSize en wijzig de waarde in 6553600. Als u de basicHttpBinding vermelding niet ziet, voegt u er een toe zoals in het volgende voorbeeld:

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

De toepassing testen

Voer de toepassing uit door op F5 te drukken. De gegevens uit de Customers en Orders tabellen worden opgehaald uit de gegevensservice en weergegeven in het formulier.

Volgende stappen

Afhankelijk van uw toepassingsvereisten zijn er verschillende stappen die u mogelijk wilt uitvoeren nadat u gerelateerde gegevens hebt opgeslagen in de Windows-toepassing. U kunt bijvoorbeeld de volgende verbeteringen aanbrengen in deze toepassing:

  • Voeg validatie toe aan de gegevensset.

  • Voeg aanvullende methoden toe aan de service voor het bijwerken van gegevens naar de database.