Recommandations relatives aux stratégies d'accès aux données

Mise à jour : novembre 2007

ADO.NET exploite un modèle d'accès aux données qui consiste à ouvrir une connexion, à obtenir des données ou à effectuer une opération, puis à fermer la connexion. ADO.NET vous permet d'utiliser ce modèle de deux façons. La première consiste à stocker des données dans un groupe de données, qui est un cache en mémoire d'enregistrements qu'il est possible de manipuler tout en étant déconnecté de la source de données. Pour utiliser un groupe de données, vous en créez une instance que vous remplissez à partir de la source de données à l'aide d'un adaptateur de données. Vous travaillez ensuite avec les données dans le groupe de données – par exemple, en liant des contrôles aux membres du groupe de données. Pour plus d'informations, consultez Vue d'ensemble des groupes de données dans Visual Studio.

L'autre façon d'utiliser ce modèle d'accès aux données consiste à effectuer directement des opérations sur la base de données. Dans ce modèle, vous utilisez une requête TableAdapter ou une commande de données qui comprend une instruction SQL ou une référence à une procédure stockée. Vous pouvez ensuite exécuter la requête ou la commande afin d'effectuer l'opération. Pour plus d'informations, consultez Extraction de données dans votre application.

Stockage des données dans les groupes de données

Un modèle commun d'accès aux données dans les applications Visual Studio consiste à stocker des données dans des groupes de données, puis à lire et écrire les données dans la base de données en utilisant des TableAdapters ou des adaptateurs de données. Les avantages du modèle de groupe de données sont les suivants :

  • Utilisation de plusieurs tables   Un groupe de données peut contenir plusieurs tables de résultats, qu'il conserve comme des objets bien distincts. Vous pouvez utiliser les tables individuellement ou naviguer de l'une à l'autre comme des tables de type parent-enfant.

  • Manipulation de données issues de différentes sources   Les tables d'un groupe de données peuvent représenter des données issues de plusieurs sources différentes (par exemple de bases de données, de fichiers XML, de feuilles de calcul, etc., tous inclus dans le même groupe de données.). Une fois placées dans le groupe de données, vous pouvez manipuler les données et les mettre en relation dans un format homogène, comme si elles étaient issues d'une seule et même source.

  • Déplacement des données entre les couches d'une application distribuée   En les conservant dans un groupe de données, vous pouvez aisément déplacer les données de la couche de présentation vers la couche d'entreprise et la couche de données de vos applications.

  • Échange de données avec d'autres applications   Les groupes de données constituent une puissante solution d'échange avec d'autres composants de votre application et avec d'autres applications. Ils prennent totalement en charge des fonctionnalités telles que la sérialisation des données au format XML ou la lecture et l'écriture de schémas XML.

  • Liaison de données   Si vous utilisez des formulaires, il est généralement plus facile de lier des contrôles aux données d'un groupe de données que de charger par programme des valeurs de données dans le contrôle après exécution d'une commande.

  • **Conservation des enregistrements en vue de les réutiliser   **Un groupe de données vous permet de manipuler les mêmes résultats à plusieurs reprises, sans devoir interroger à nouveau la base de données. À l'aide des fonctionnalités du groupe de données, vous pouvez filtrer et trier des enregistrements, et vous pouvez utiliser le groupe de données comme une source de données en cas de pagination.

  • Facilité de programmation   Lorsque vous utilisez un groupe de données, vous pouvez générer un fichier de classe représentant sa structure en tant qu'objets (par exemple, il est possible d'accéder à une table Customers du groupe de données en tant qu'objet dataset.Customers). La programmation devient ainsi plus facile, plus claire et moins sujette aux erreurs ; elle peut en outre être prise en charge par des outils Visual Studio, tels que IntelliSense ou l'Assistant Configuration d'adaptateur de données.

Exécution d'opérations directement sur la base de données

Une autre approche consiste à interagir directement avec la base de données. Ce modèle d'accès aux données exige l'emploi d'un objet de commande de données comportant une instruction SQL ou une référence à une procédure stockée. Vous pouvez ensuite exécuter la commande pour effectuer l'opération. Pour plus d'informations, consultez Commandes et paramètres (ADO.NET).

Note de sécurité :

Lorsque vous utilisez des commandes de données avec une propriété CommandType possédant la valeur Text, vérifiez attentivement les informations envoyées par un client avant de les passer à la base de données. Des utilisateurs malveillants peuvent tenter d'envoyer (injecter) des instructions SQL modifiées ou supplémentaires afin d'accéder à la base de données ou de l'endommager. Avant de transférer la saisie d'un utilisateur vers une base de données, vous devez toujours vérifier la validité des informations. Il est recommandé de toujours utiliser des requêtes ou des procédures stockées paramétrées lorsque cela est possible.

L'exécution directe d'opérations sur la base de données présente des avantages spécifiques, parmi lesquels :

  • Fonctionnalités supplémentaires   Comme cela a déjà été précisé, certaines opérations, telles que l'exécution de commandes DDL, ne peuvent être effectuées qu'à l'aide de commandes de données.

  • Meilleur contrôle de l'exécution   En utilisant des commandes (et un lecteur de données, si vous lisez des données), vous contrôlez plus directement l'exécution d'une instruction SQL ou d'une procédure stockée, le moment de cette exécution et la gestion des résultats ou des valeurs de retour.

  • Moins de charge mémoire   La lecture et l'écriture directes dans la base de données rendent inutile le stockage de données dans un groupe de données. Étant donné que le groupe de données requiert de la mémoire, vous pouvez ainsi réduire la charge mémoire dans votre application. Cela est particulièrement vrai dans les cas où vous prévoyez de n'utiliser les données qu'une seule fois, par exemple lorsque vous affichez les résultats d'une recherche dans une page Web. Dans ce cas-là, il n'est pas indispensable de créer et de remplir un groupe de données pour afficher les données.

  • Moins de programmation dans certains cas   Dans quelques cas, en particulier dans les applications Web, l'enregistrement de l'état d'un groupe de données impose une étape de programmation supplémentaire. Par exemple, dans les pages Web Forms, la page est recréée à chaque boucle ; sauf si vous ajoutez du code pour enregistrer et restaurer un groupe de données, lui aussi est annulé et recréé à chaque boucle. En utilisant un lecteur de données pour lire directement dans la base de données, vous vous épargnez les étapes supplémentaires requises pour gérer le groupe de données.

Recommandations relatives à l'accès aux données

Les sections suivantes proposent des recommandations qui facilitent le choix de la stratégie d'accès aux données à utiliser avec certains types spécifiques d'applications.

Windows Forms

En règle générale, un Windows Form nécessite l'emploi d'un groupe de données. Les Windows Forms sont généralement utilisés sur les clients riches où le formulaire n'est ni créé, ni supprimé (de même que ses données) à chaque opération utilisateur, comme c'est le cas pour les Web Forms. En outre, les applications Windows Forms présentent en général des scénarios d'accès aux données dans lesquels il est préférable de conserver des enregistrements en cache, comme lorsqu'il s'agit d'afficher un enregistrement à la fois dans le formulaire. Pour plus d'informations, consultez Création d'applications de données clientes.

Certaines circonstances particulières exigent le recours à un groupe de données :

  • manipulation répétitive des mêmes enregistrements, comme pour permettre à l'utilisateur de naviguer entre les enregistrements ;

  • utilisation de l'architecture de liaison des données des Windows Forms, laquelle est spécialement conçue pour fonctionner avec des groupes de données ;

  • pour une ou plusieurs des raisons répertoriées précédemment pour les Web Forms.

Utilisez une requête TableAdapter ou une commande de données dans les circonstances suivantes :

  • en cas d'obtention d'une valeur scalaire de la base de données ;

  • lors de l'exécution d'une opération n'impliquant pas une requête, comme une commande DDL ;

  • en cas d'obtention de données en lecture seule pour les afficher dans un formulaire, lors de la création d'un rapport par exemple (en d'autres termes, utilisez une commande de données s'il est inutile que les données demeurent accessibles après l'accès à celles-ci).

Web Forms

En règle générale, utilisez des commandes de données, et utilisez un lecteur de données pour extraire des données. Dans la mesure où les pages Web Forms, leurs contrôles et composants, sont recréés à chaque aller-retour de la page, le fait de créer et remplir un groupe de données à chaque fois se révèle souvent inefficace, à moins que vous n'envisagiez de mettre celui-ci en cache entre deux allers-retours.

Utilisez un groupe de données dans les circonstances suivantes :

  • Vous voulez utiliser plusieurs tables distinctes ou des tables issues de différentes sources de données.

  • Vous échangez des données avec une autre application ou un composant tel qu'un service Web XML.

  • Vous devez soumettre chaque enregistrement obtenu de la base de données à un traitement intensif. Si vous utilisez une commande de données et un lecteur de données, le fait de traiter chaque enregistrement à mesure qu'il est lu peut faire en sorte que la connexion demeure ouverte pendant une longue période, ce qui risque de nuire aux performances et à l'évolutivité de votre application.

  • Le traitement des données porte sur des enregistrements dépendant les uns des autres (par exemple lors de la recherche d'informations dans des enregistrements connexes).

  • Vous voulez effectuer des opérations XML telles que des transformations XSLT sur les données.

  • Vous préférez bénéficier de la simplicité de la programmation qu'offrent les groupes de données.

Services Web XML

Les services Web XML sont des applications Web ASP.NET, qui utilisent donc le même modèle que les pages Web Forms : ils sont créés et supprimés chaque fois qu'ils sont appelés. Ceci suggère que le modèle d'accès aux données d'un service Web XML correspond pour la plupart à celui des Web Forms. Cependant, ces services constituent souvent des objets de couche intermédiaire et l'essentiel de leur fonction consiste souvent à échanger des données avec d'autres applications du Web.

Utilisez un groupe de données dans les circonstances suivantes :

  • Votre service Web XML envoie et reçoit des données, comme dans le cas où il est envoyé comme valeur de retour d'une méthode et reçu comme argument d'une méthode. Ce choix est fondamental pour les services Web XML car, même si d'autres raisons peuvent vous inciter à utiliser une commande de données, l'échange de données avec d'autres composants nécessite presque toujours le recours à un groupe de données.

  • Une ou plusieurs des conditions répertoriées précédemment pour les Web Forms sont réunies.

Utilisez une commande de données (et, au besoin, un lecteur de données) dans les circonstances suivantes :

  • Le service Web XML récupère une valeur scalaire.

  • Le service Web XML exécute une opération n'impliquant pas une requête, comme une commande DDL.

  • Le service Web XML appelle une procédure stockée pour exécuter une logique dans la base de données.

Voir aussi

Concepts

Nouveautés des données

Appareils et accès aux données

Autres ressources

Procédures pas à pas relatives aux données

Mise en route avec l'accès aux données

Connexion aux données dans Visual Studio

Préparation de votre application pour recevoir des données

Extraction de données dans votre application

Affichage des données sur des formulaires dans les applications Windows

Modification des données dans votre application

ADO.NET