Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Remarque
La DataSet classe et les classes associées sont des technologies .NET Framework héritées du début des années 2000 qui permettent aux applications d’utiliser des données en mémoire pendant que les applications sont déconnectées de la base de données. Les technologies sont particulièrement utiles pour les applications qui permettent aux utilisateurs de modifier les données et de conserver les modifications apportées à la base de données. Bien que les jeux de données soient une technologie éprouvée, l’approche recommandée pour les nouvelles applications .NET consiste à utiliser Entity Framework Core. Entity Framework offre un moyen plus naturel d’utiliser des données tabulaires en tant que modèles objet et dispose d’une interface de programmation plus simple.
Les applications de données multiniveau sont des applications qui accèdent aux données et sont séparées en plusieurs couches logiques ou niveaux. La séparation des composants d’application en niveaux discrets augmente la facilité de maintenance et l’extensibilité de l’application. Pour ce faire, il facilite l’adoption de nouvelles technologies qui peuvent être appliquées à un niveau unique sans vous obliger à redéfinir l’ensemble de la solution. L’architecture à plusieurs niveaux comprend un niveau de présentation, un niveau intermédiaire et un niveau de données. Le niveau intermédiaire inclut généralement une couche d’accès aux données, une couche logique métier et des composants partagés tels que l’authentification et la validation. Le niveau données inclut une base de données relationnelle. Les applications de niveau N stockent généralement des informations sensibles dans la couche d’accès aux données du niveau intermédiaire pour maintenir l’isolation des utilisateurs finaux qui accèdent au niveau de présentation. Pour plus d’informations, consultez la vue d’ensemble des applications de données multiniveau.
Une façon de séparer les différents niveaux d’une application multiniveau consiste à créer des projets discrets pour chaque niveau que vous souhaitez inclure dans votre application. Les jeux de données typés contiennent une DataSet Project propriété qui détermine les projets dans lesquels le jeu de données généré et TableAdapter le code doivent entrer.
Cette procédure pas à pas décrit comment séparer le code du dataset et TableAdapter en projets de bibliothèque de classes discrètes à l’aide du Concepteur de DataSet. Après avoir séparé le jeu de données et le code TableAdapter, vous créez une instance de Services Windows Communication Foundation et services de données WCF dans Visual Studio pour appeler le niveau d’accès aux données. Enfin, vous créez une application Windows Forms comme niveau de présentation. Ce niveau accède aux données à partir du service de données.
Au cours de cette procédure pas à pas, vous effectuez les étapes suivantes :
Créez une solution à plusieurs niveaux qui contient plusieurs projets.
Ajoutez deux projets de bibliothèque de classes à la solution multiniveau.
Créez un dataset typé à l’aide de l’Assistant Configuration de source de données.
Séparez les TableAdapters et le code de jeu de données générés en projets discrets.
créer un service WCF (Windows Communication Foundation) pour appeler la couche d'accès aux données ;
Créez des fonctions dans le service pour récupérer des données à partir du niveau d’accès aux données.
Créez une application Windows Forms pour servir de niveau de présentation.
Créez des contrôles Windows Forms liés à la source de données.
Écrivez du code pour remplir les tables de données.
Conditions préalables
Pour suivre ce tutoriel, vous avez besoin des charges de travail de développement et de traitement de données.NET desktop installées dans Visual Studio. Pour les installer, ouvrez visual Studio Installer et choisissez Modifier (ou Plus>Modifier) en regard de la version de Visual Studio que vous souhaitez modifier. Consultez Modifier Visual Studio.
Cette procédure pas à pas utilise SQL Server Express LocalDB et l’exemple de base de données Northwind.
Si sql Server Express LocalDB n’est pas installé, installez-le à partir de la page de téléchargement SQL Server Express ou via Visual Studio Installer. Dans Visual Studio Installer, vous pouvez installer SQL Server Express LocalDB dans le cadre de la charge de travail de développement de bureau .NET ou en tant que composant individuel.
Installez l’exemple de base de données Northwind en procédant comme suit :
Dans Visual Studio, ouvrez la fenêtre de l’Explorateur d’objets SQL Server. (L’Explorateur d’objets SQL Server est installé dans le cadre de la charge de travail de stockage et de traitement des données dans Visual Studio Installer.) Développez le nœud SQL Server . Cliquez avec le bouton droit sur votre instance LocalDB, puis sélectionnez nouvelle requête.
Si vous ne voyez pas l’instance LocalDB, utilisez le bouton de barre d’outils Ajouter SQL Server. La boîte de dialogue s’affiche. Dans la boîte de dialogue, développez Local et choisissez MSSQLLocalDB. Entrez les informations d’identification appropriées. Vous pouvez laisser le choix par défaut pour la base de données.
Sélectionnez Se connecter. Un nœud est ajouté pour LocalDB dans l’Explorateur d’objets SQL Server.
Cliquez avec le bouton droit sur votre instance LocalDB, puis sélectionnez nouvelle requête.
Une fenêtre de l’éditeur de requête s’ouvre.
Copiez le script Northwind Transact-SQL dans votre presse-papiers. Ce script T-SQL crée la base de données Northwind à partir de zéro et la remplit avec des données.
Collez le script T-SQL dans l’éditeur de requête, puis choisissez le bouton Exécuter.
Après un court laps de temps, la requête se termine et la base de données Northwind est créée.
Créez la solution de niveau n et la bibliothèque de classes pour contenir le jeu de données (DataEntityTier)
La première étape de cette procédure pas à pas consiste à créer une solution et deux projets de bibliothèque de classes. La première bibliothèque de classes contient le jeu de données (la classe typée DataSet générée et les DataTables qui contiennent les données de l’application). Ce projet est utilisé comme couche d’entité de données de l’application et se trouve généralement dans le niveau intermédiaire. Le jeu de données crée le jeu de données initial et sépare automatiquement le code dans les deux bibliothèques de classes.
Remarque
Veillez à nommer correctement le projet et la solution avant de cliquer sur OK. Cela vous permettra d’effectuer cette procédure pas à pas plus facilement.
Pour créer la solution de niveau n et la bibliothèque de classes DataEntityTier
Dans Visual Studio, créez un projet à l’aide du modèle de projet Windows Forms App (.NET Framework) pour C# ou Visual Basic. .NET Core, .NET 5 et versions ultérieures ne sont pas pris en charge.
Nommez le projet DataEntityTier.
Nommez la solution NTierWalkthrough, puis choisissez OK.
Une solution NTierWalkthrough qui contient le projet DataEntityTier est créée et ajoutée à l’Explorateur de solutions.
Créer la bibliothèque de classes pour contenir les TableAdapters (DataAccessTier)
L’étape suivante après avoir créé le projet DataEntityTier consiste à créer un autre projet de bibliothèque de classes. Ce projet contient les TableAdapters générés et est appelé niveau d’accès aux données de l’application. Le niveau d’accès aux données contient les informations requises pour se connecter à la base de données et se trouve généralement dans le niveau intermédiaire.
Pour créer une bibliothèque de classes distincte pour TableAdapters
Cliquez avec le bouton droit sur la solution dans l’Explorateur de solutions et choisissez Ajouter>un nouveau projet.
Choisissez le modèle de projet Bibliothèque de classes (.NET Framework ).
Nommez le projet DataAccessTier et choisissez OK.
Le projet DataAccessTier est créé et ajouté à la solution NTierWalkthrough.
Créer le jeu de données
L’étape suivante consiste à créer un jeu de données typé. Les jeux de données typés sont créés avec les classes de jeu de données (y compris les classes DataTables) ainsi que les classes TableAdapter dans un seul projet. (Toutes les classes sont générées dans un seul fichier.) Lorsque vous séparez le jeu de données et TableAdapters en différents projets, il s’agit de la classe de jeu de données déplacée vers l’autre projet, en laissant les TableAdapter classes dans le projet d’origine. Par conséquent, créez le jeu de données dans le projet qui contiendra finalement Les TableAdapters (le projet DataAccessTier). Créez le jeu de données à l’aide de l'Assistant Configuration de source de données.
Remarque
Vous devez avoir accès à la base de données d'exemple Northwind pour créer la connexion. Pour plus d’informations sur la configuration de l’exemple de base de données Northwind, consultez Guide pratique pour installer des exemples de bases de données.
Pour créer le dataset
Sélectionnez DataAccessTier dans l’Explorateur de solutions.
Dans le menu Données , sélectionnez Afficher les sources de données.
La fenêtre Sources de données s’ouvre.
Dans la fenêtre Sources de données , sélectionnez Ajouter une nouvelle source de données pour démarrer l’Assistant Configuration de la source de données.
Dans la page Choisir un type de source de données , sélectionnez Base de données , puis Sélectionnez Suivant.
Dans la page Choisir votre connexion de données , effectuez l’une des actions suivantes :
Si une connexion de données à l’échantillon de la base de données Northwind est disponible dans le menu déroulant, sélectionnez-la.
ou
Sélectionnez Nouvelle connexion pour ouvrir la boîte de dialogue Ajouter une connexion .
Si la base de données nécessite un mot de passe, sélectionnez l’option pour inclure des données sensibles, puis choisissez Suivant.
Remarque
Si vous avez sélectionné un fichier de base de données local (au lieu de vous connecter à SQL Server), vous pouvez être invité à ajouter le fichier au projet. Choisissez Oui pour ajouter le fichier de base de données au projet.
Sélectionnez Suivant dans la page Enregistrer la chaîne de connexion dans la page Fichier de configuration de l’application .
Développez le nœud Tables dans la page Choisir vos objets de base de données .
Cochez les cases des tables Clients et Commandes , puis choisissez Terminer.
NorthwindDataSet est ajouté au projet DataAccessTier et apparaît dans la fenêtre Sources de données .
Séparer les TableAdapters du jeu de données
Après avoir créé le jeu de données, séparez la classe de jeu de données générée des TableAdapters. Pour ce faire, définissez la propriété Projet DataSet sur le nom du projet dans lequel stocker la classe de jeu de données séparée.
Pour séparer les TableAdapters du jeu de données
Double-cliquez sur NorthwindDataSet.xsd dans l’Explorateur de solutions pour ouvrir le jeu de données dans le Concepteur de jeux de données.
Sélectionnez une zone vide du concepteur.
Recherchez le nœud Projet DataSet dans la fenêtre Propriétés .
Dans la liste projet DataSet , sélectionnez DataEntityTier.
Dans le menu Générer, sélectionnez Générer la solution.
Le jeu de données et TableAdapters sont séparés dans les deux projets de bibliothèque de classes. Le projet qui contenait à l’origine l’ensemble du jeu de données (
DataAccessTier) contient désormais uniquement les TableAdapters. Le projet désigné dans la propriété DataSet Project (DataEntityTier) contient le jeu de données typé : NorthwindDataSet.Dataset.Designer.vb (ou NorthwindDataSet.Dataset.Designer.cs).
Remarque
Lorsque vous séparez des jeux de données et des TableAdapters (en définissant la propriété Projet DataSet ), les classes de jeu de données partielles existantes dans le projet ne seront pas déplacées automatiquement. Les classes partielles de jeu de données existantes doivent être déplacées manuellement vers le projet de jeu de données.
Créer une application de service
Cette procédure pas à pas montre comment accéder au niveau d’accès aux données à l’aide d’un service WCF. Nous allons donc créer une application de service WCF.
Pour créer une application de service WCF
Cliquez avec le bouton droit sur la solution dans l’Explorateur de solutions et choisissez Ajouter>un nouveau projet.
Dans la boîte de dialogue Nouveau projet , dans le volet gauche, sélectionnez WCF. Dans le volet central, sélectionnez Bibliothèque de services WCF.
Nommez le projet DataService , puis sélectionnez OK.
Le projet DataService est créé et ajouté à la solution NTierWalkthrough.
Créer des méthodes dans le niveau d’accès aux données pour retourner les données des clients et des commandes
Le service de données doit appeler deux méthodes dans le niveau d’accès aux données : GetCustomers et GetOrders. Ces méthodes retournent les tables Northwind Customers et Orders. Créez les méthodes GetCustomers et GetOrders dans le projet DataAccessTier.
Pour créer une méthode dans la couche d'accès aux données qui retourne la table Customers
Dans l’Explorateur de solutions, double-cliquez sur NorthwindDataset.xsd pour ouvrir le jeu de données.
Cliquez avec le bouton droit sur CustomersTableAdapter , puis cliquez sur Ajouter une requête.
Dans la page Choisir un type de commande , conservez la valeur par défaut des instructions Use SQL , puis cliquez sur Suivant.
Dans la page Choisir un type de requête , conservez la valeur par défaut de SELECT qui retourne des lignes , puis cliquez sur Suivant.
Dans la page Spécifier une instruction SQL SELECT , laissez la requête par défaut, puis cliquez sur Suivant.
Dans la page Choisir des méthodes à générer, tapez GetCustomers pour le nom de la méthode dans la section Retourner un DataTable.
Cliquez sur Terminer.
Pour créer une méthode dans la couche d'accès aux données qui retourne la table Orders
Cliquez avec le bouton droit sur OrdersTableAdapter , puis cliquez sur Ajouter une requête.
Dans la page Choisir un type de commande , conservez la valeur par défaut des instructions Use SQL , puis cliquez sur Suivant.
Dans la page Choisir un type de requête , conservez la valeur par défaut de SELECT qui retourne des lignes , puis cliquez sur Suivant.
Dans la page Spécifier une instruction SQL SELECT , laissez la requête par défaut, puis cliquez sur Suivant.
Dans la page Choisir des méthodes à générer , tapez GetOrders pour le nom de la méthode dans la section Retour d’un DataTable .
Cliquez sur Terminer.
Dans le menu Générer, cliquez sur Générer la solution.
Ajouter une référence à l'entité de données et aux niveaux d'accès aux données dans le service de données.
Étant donné que le service de données nécessite des informations à partir du jeu de données et de TableAdapters, ajoutez des références aux projets DataEntityTier et DataAccessTier .
Pour ajouter des références au service de données
Cliquez avec le bouton droit sur DataService dans l’Explorateur de solutions , puis cliquez sur Ajouter une référence.
Cliquez sur l’onglet Projets dans la boîte de dialogue Ajouter une référence .
Sélectionnez les projets DataAccessTier et DataEntityTier .
Cliquez sur OK.
Ajouter des fonctions au service pour appeler les méthodes GetCustomers et GetOrders dans le niveau d’accès aux données
Maintenant que le niveau d’accès aux données contient les méthodes permettant de retourner des données, créez des méthodes dans le service de données pour appeler les méthodes du niveau d’accès aux données.
Remarque
Pour les projets C#, vous devez ajouter une référence à l’assembly System.Data.DataSetExtensions pour que le code suivant soit compilé.
Pour créer les fonctions GetCustomers et GetOrders dans le service de données
Dans le projet DataService , double-cliquez sur IService1.vb ou IService1.cs.
Ajoutez le code suivant sous le commentaire Ajouter vos opérations de service ici :
[OperationContract] DataEntityTier.NorthwindDataSet.CustomersDataTable GetCustomers(); [OperationContract] DataEntityTier.NorthwindDataSet.OrdersDataTable GetOrders();Remarque
Le code de ce didacticiel est disponible en C# et En Visual Basic. Pour basculer la langue du code sur cette page entre C# et Visual Basic, utilisez le sélecteur de langage de code en haut de la page à droite.
Dans le projet DataService, double-cliquez sur Service1.vb (ou Service1.cs).
Ajoutez le code suivant à la classe 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(); }Dans le menu Générer, cliquez sur Générer la solution.
Créer un niveau de présentation pour afficher des données à partir du service de données
Maintenant que la solution contient le service de données qui a des méthodes appelant le niveau d’accès aux données, créez un autre projet qui appelle le service de données et présente les données aux utilisateurs. Pour cette procédure pas à pas, créez une application Windows Forms ; il s’agit du niveau de présentation de l’application multiniveau.
Pour créer le projet de couche Présentation
Cliquez avec le bouton droit sur la solution dans l’Explorateur de solutions et choisissez Ajouter>un nouveau projet.
Dans la boîte de dialogue Nouveau projet , dans le volet gauche, sélectionnez Bureau Windows. Dans le volet central, sélectionnez Application Windows Forms.
Nommez le projet PresentationTier , puis cliquez sur OK.
Le projet PresentationTier est créé et ajouté à la solution NTierWalkthrough.
Définir le projet PresentationTier comme projet de démarrage
Nous allons définir le projet PresentationTier comme projet de démarrage pour la solution, car il s’agit de l’application cliente réelle qui présente et interagit avec les données.
Pour définir le nouveau projet de niveau Présentation comme projet de démarrage
- Dans l’Explorateur de solutions, cliquez avec le bouton droit sur PresentationTier , puis cliquez sur Définir comme projet de démarrage.
Ajouter des références à la couche de présentation
L’application cliente, PresentationTier nécessite une référence de service au service de données afin d’accéder aux méthodes du service. En outre, une référence au jeu de données est nécessaire pour activer le partage de type par le service WCF. Tant que vous n’activez pas le partage de type via le service de données, le code ajouté à la classe de jeu de données partielle n’est pas disponible pour le niveau de présentation. Étant donné que vous ajoutez généralement du code de validation aux événements de modification de ligne et de colonne d’une table de données, il est probable que vous souhaitez accéder à ce code à partir du client.
Pour ajouter une référence au niveau de présentation
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur PresentationTier , puis sélectionnez Ajouter une référence.
Dans la boîte de dialogue Ajouter une référence , sélectionnez l’onglet Projets .
Sélectionnez DataEntityTier et choisissez OK.
Pour ajouter une référence de service au niveau de présentation
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur PresentationTier , puis sélectionnez Ajouter une référence de service.
Dans la boîte de dialogue Ajouter une référence de service , sélectionnez Découvrir.
Sélectionnez Service1 et choisissez OK.
Remarque
Si vous avez plusieurs services sur l’ordinateur actuel, sélectionnez le service que vous avez créé précédemment dans cette procédure pas à pas (le service qui contient les méthodes
GetCustomersetGetOrders).
Ajouter DataGridViews au formulaire pour afficher les données retournées par le service de données
Une fois que vous avez ajouté la référence de service au service de données, la fenêtre Sources de données est automatiquement remplie avec les données retournées par le service.
Pour ajouter deux data bound DataGridViews au formulaire
Dans l’Explorateur de solutions, sélectionnez le projet PresentationTier .
Dans la fenêtre Sources de données , développez NorthwindDataSet et recherchez le nœud Customers .
Faites glisser le nœud Clients vers Form1.
Dans la fenêtre Sources de données , développez le nœud Clients et recherchez le nœud Commandes associé (nœud Commandes imbriqué dans le nœud Clients ).
Faites glisser le nœud Commandes correspondant sur Form1.
Créez un gestionnaire d’événements
Form1_Loaden double-cliquant sur une zone vide du formulaire.Ajoutez le code suivant au gestionnaire d’événements
Form1_Load.
Augmenter la taille maximale du message autorisée par le service
La valeur par défaut pour maxReceivedMessageSize n'est pas suffisamment grande pour contenir les données récupérées à partir des tables Customers et Orders. Dans les étapes suivantes, vous allez augmenter la valeur à 6553600. Vous modifiez la valeur sur le client, qui met automatiquement à jour la référence du service.
Remarque
La taille par défaut inférieure est destinée à limiter l’exposition aux attaques par déni de service (DoS). Pour plus d’informations, consultez MaxReceivedMessageSize.
Pour augmenter la valeur de maxReceivedMessageSize
Dans l’Explorateur de solutions, double-cliquez sur le fichier app.config dans le projet PresentationTier .
Recherchez l’attribut maxReceivedMessageSize et remplacez la valeur
6553600par . Si vous ne voyez pas l’entréebasicHttpBinding, ajoutez-en un comme dans l’exemple suivant :<system.serviceModel> <bindings> <basicHttpBinding> <binding maxBufferSize="6553600" maxReceivedMessageSize="6553600" /> </basicHttpBinding> </bindings> </system.serviceModel>
Tester l’application
Exécutez l’application en appuyant sur F5. Les données des tables Customers et Orders sont extraites du service de données et affichées sur le formulaire.
Étapes suivantes
En fonction des besoins de votre application, vous pouvez effectuer plusieurs étapes après avoir enregistré les données associées dans l’application Windows. Par exemple, vous pouvez apporter les améliorations suivantes à cette application :
Ajoutez la validation au jeu de données.
Ajoutez des méthodes supplémentaires au service pour la mise à jour des données vers la base de données.