Introduction aux adaptateurs de données
Mise à jour : novembre 2007
Les adaptateurs de données font partie intégrante des fournisseurs managés par ADO.NET, c'est-à-dire le groupe d'objets servant à communiquer entre une source de données et un groupe de données. (En plus des adaptateurs, les fournisseurs managés incluent des objets de connexion, des objets lecteurs des données et des objets de commande.) Les adaptateurs servent à échanger des données entre une source et un groupe de données. Dans de nombreuses applications, cet échange consiste à lire des données dans une base pour les placer dans un groupe de données, puis à écrire les données modifiées du groupe de données dans la base. Toutefois, un adaptateur de données peut déplacer les données entre n'importe quelle source et un groupe de données. Par exemple, un adaptateur peut déplacer les données entre un serveur Microsoft Exchange et un groupe de données.
Remarque : |
---|
Dans la version antérieure de Visual Studio, des adaptateurs de données étaient utilisés pour la communication entre applications et bases de données. Même si les adaptateurs de données figurent toujours parmi les principaux composants des .Fournisseurs de données .NET Framework (ADO.NET), les TableAdapters sont des composants générés par le concepteur qui simplifient le processus de déplacement des données entre votre application et une base de données. Pour plus d'informations sur l'utilisation de TableAdapters, consultez Vue d'ensemble de TableAdapter. |
En général, les adaptateurs sont configurables, ce qui vous permet de spécifier les données à déplacer vers et hors du groupe de données. Pour ce faire, des références - à des instructions SQL ou à des procédures stockées - sont appelées pour lire ou écrire dans la base de données.
Visual Studio permet l'utilisation de ces adaptateurs avec des bases de données :
L'objet OleDbDataAdapter peut être utilisé avec n'importe quelle source de données exposée par un fournisseur OLE DB.
L'objet SqlDataAdapter est propre à SQL Server. Parce qu'il n'a pas à traverser une couche OLE DB, il est plus rapide que la classe OleDbDataAdapter. Toutefois, il ne peut être utilisé qu'avec SQL Server version 7.0 ou ultérieure.
L'objet OdbcDataAdapter est optimisé pour l'accès aux sources de données ODBC.
L'objet OracleDataAdapter est optimisé pour l'accès aux bases de données Oracle.
Remarque : Les adaptateurs de données, les connexions de données, les commandes de données et les lecteurs de données sont les composants qui constituent un fournisseur de données .NET Framework. Microsoft et les fournisseurs tiers peuvent proposer d'autres fournisseurs de données .NET Framework pouvant être intégrés à Visual Studio. Pour plus d'informations sur les différents fournisseurs de données .NET Framework, consultez .Fournisseurs de données .NET Framework (ADO.NET).
Pour créer et manipuler des adaptateurs, vous pouvez utiliser les parties suivantes des espaces de noms de fournisseurs managés .NET Framework.
Espace de noms de fournisseurs managés SqlClient
Espace de noms de fournisseurs managés OleDb
En règle générale, chaque adaptateur de données échange des données entre une seule table de source et un seul objet DataTable du groupe de données. Si le groupe de données contient plusieurs tables, la stratégie habituelle consiste à avoir plusieurs adaptateurs de données l'alimentant en données et écrivant les données en retour dans les différentes tables de la source.
Lorsque vous souhaitez remplir une table d'un groupe de données, vous appelez une méthode d'adaptateur qui exécute une instruction SQL ou une procédure stockée. L'adaptateur crée un objet lecteur de données (SqlDataReader, OleDbDataReader, OdbcDataReader ou OracleDataReader) pour lire les données d'un groupe de données.
Remarque : |
---|
Vous pouvez lire les données dans la base sans avoir à les enregistrer dans un groupe de données, ce qui peut s'avérer très efficace lorsque des données en lecture seule sont concernées. Pour plus d'informations, consultez la section « Données en lecture seule » ci-dessous. Vous pouvez également exécuter des instructions SQL directement, sans les utiliser pour remplir un groupe de données. Pour plus d'informations, consultez Commandes et paramètres (ADO.NET). |
De même, pour mettre à jour une base de données, vous appelez une méthode d'adaptateur qui appelle une instruction SQL ou une procédure stockée, laquelle se charge d'effectuer la mise à jour dans la base de données.
Adaptateurs de données et tables connexes
Le fait d'avoir des tables séparées dans un groupe de données signifie en général qu'un adaptateur de données ne référence pas des commandes SQL ou des procédures stockées joignant des tables. Au lieu de cela, les informations issues de tables connexes sont lues séparément dans le groupe de données par différents adaptateurs. Un objet DataRelation est ensuite utilisé pour gérer les contraintes entre les tables du groupe de données (mises à jour en cascade, par exemple) et pour vous permettre de naviguer entre des enregistrements maître et enfant apparentés.
Imaginons par exemple que vous travaillez avec deux tables connexes de la base de données Northwind, Customers et Orders. Plutôt que de spécifier une jointure pour combiner les deux tables en un seul jeu de résultats, on définit généralement deux adaptateurs, l'un pour remplir une table Customers du groupe de données et un autre pour lire les enregistrements Order dans une table différente du groupe de données. Chaque adaptateur inclurait probablement des critères de sélection afin de limiter le nombre d'enregistrements dans les tables de données.
Dans le groupe de données, vous définiriez également un objet DataRelation spécifiant que les enregistrements de commande sont reliés aux enregistrements de client par le champ CustomerID. Dans ce cas de figure, vous pourriez toujours gérer les tables individuellement, ce qui ne serait pas possible si vous aviez joint des tables avant d'extraire les enregistrements de la source de données. Ainsi, lorsque vous souhaitez travailler avec des enregistrements connexes, vous pouvez appeler des propriétés et des méthodes de l'objet DataRelation.
Pour plus d'informations sur les relations de données, consultez Relations dans les groupes de données.
Objets de connexion
Un adaptateur a besoin d'une connexion ouverte à une source pour lire et écrire les données. Par conséquent, il utilise des objets de connexion (SqlConnection, OleDbConnection, OdbcConnection ou OracleConnection) pour communiquer avec une source de données. (L'adaptateur peut contenir jusqu'à quatre références de connexion, une pour chaque type d'action à effectuer : sélection, mise à jour, insertion et suppression.)
Le tableau suivant répertorie les objets de connexion sous l'onglet Données de la Boîte à outils :
Objet de connexion |
Description |
---|---|
Connexion à une base de données SQL Server 7.0 ou ultérieur. |
|
Connexion à une source de données OLE DB. |
|
Connexion à une source de données ODBC. |
|
Connexion à une base de données Oracle. |
Dans tous les cas, l'objet de connexion représente une unique session dans la source de données. Tous les objets de connexion fournissent des propriétés permettant d'établir et de modifier les détails de connexion (tels que l'ID d'utilisateur, le mot de passe et le paramètre de délai d'attente de connexion). Ils fournissent également des méthodes permettant de débuter, de valider et de restaurer des transactions de base de données. Pour plus d'informations sur les objets de connexion, consultez Connexion à une source de données (ADO.NET).
Note de sécurité : |
---|
Le stockage d'informations sensibles (telles qu'un nom de serveur, un nom d'utilisateur et un mot de passe) peut affecter la sécurité de votre application. L'utilisation de l'authentification Windows (également appelée sécurité intégrée) offre un moyen plus sûr de contrôler l'accès à une base de données. |
Objets de commande ADO.NET
En vous servant d'un adaptateur, vous pouvez lire, ajouter, mettre à jour et supprimer des enregistrements dans une source de données. Pour vous permettre de spécifier la manière dont ces opérations doivent être réalisées, un adaptateur prend en charge les quatre propriétés suivantes :
SelectCommand : référence à une commande (instruction SQL ou procédure stockée) qui extrait des lignes d'un magasin de données.
InsertCommand : référence à une commande qui insère des lignes dans le magasin de données.
UpdateCommand : référence à une commande qui modifie des lignes dans le magasin de données.
DeleteCommand : référence à une commande qui supprime des lignes dans le magasin de données.
Les propriétés sont elles-mêmes des objets (elles sont des instances de la classe SqlCommand, OleDbCommand, OdbcCommand ou OracleCommand). Les objets prennent en charge une propriété CommandText contenant une référence à une instruction SQL ou à une procédure stockée.
Remarque : |
---|
La classe de commande doit correspondre à la classe de connexion. Par exemple, si vous utilisez un objet SqlConnection pour communiquer avec un serveur SQL, vous devez également utiliser des commandes dérivées de la classe SqlCommand. |
Bien qu'il soit possible de définir explicitement le texte d'un objet de commande, cela n'est pas toujours nécessaire ; dans de nombreux cas, Visual Studio générera les instructions SQL requises. En outre, l'adaptateur peut automatiquement générer les instructions SQL appropriées au moment de l'exécution, si les objets UpdateCommand, InsertCommand ou DeleteCommand ne sont pas spécifiés. Pour plus d'informations, consultez Génération de commandes à l'aide de CommandBuilders (ADO.NET).
Toutefois, vous pouvez manipuler des objets de commande au moment de la création et de l'exécution pour exercer un contrôle plus direct sur la manière dont les commandes sont exécutées. Ainsi, vous pouvez créer ou modifier la commande associée à un objet SelectCommand juste avant qu'il ne soit exécuté.
Vous pouvez également exécuter des commandes vous-même, indépendamment de l'adaptateur de données. Vous pouvez ainsi passer par le biais de l'adaptateur de données des commandes SQL arbitraires pour définir ou modifier, par exemple, les définitions de base de données. Vous pouvez également appeler directement des procédures stockées qui ne retournent pas de jeu d'enregistrements, par exemple une procédure stockée comparant pour validation des informations entrées par un utilisateur avec le contenu de la base de données. Pour plus d'informations, consultez Exécution d'une commande (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. Pour plus d'informations, consultez Vue d'ensemble des attaques de script. |
Paramètres de commande
Les commandes d'un adaptateur de données sont en général définies par des paramètres. Ainsi, la commande de la propriété SelectCommand contient souvent un paramètre dans sa clause WHERE, ce qui vous permet de spécifier au moment de l'exécution les enregistrements à extraire de la base de données. Les autres commandes utilisent des paramètres qui vous permettent de passer, au moment de l'exécution, les données à écrire dans un enregistrement et l'enregistrement de la base de données à mettre à jour. Pour plus d'informations sur l'utilisation des paramètres dans les adaptateurs de données, consultez Paramètres des commandes d'adaptateur de données.
Lecture et mise à jour des données à l'aide des adaptateurs
La première fonction d'un adaptateur est la communication des données entre un magasin de données et un groupe de données. L'adaptateur prend en charge un certain nombre de méthodes spécifiques permettant la transmission des données entre la base et le groupe de données.
Remarque : |
---|
Si vous souhaitez seulement lire les données (sans les mettre à jour), vous n'avez pas besoin de les enregistrer dans un groupe de données. Au lieu de cela, vous pouvez les lire directement dans la base de données et les passer à une application. Pour plus d'informations, consultez la section « Données en lecture seule » ci-dessous. |
Vous pouvez utiliser un adaptateur de données pour effectuer les opérations suivantes :
Récupération de lignes d'un magasin de données et passage aux tables correspondantes du groupe de données.
Pour extraire des lignes dans un groupe de données, utilisez la méthode Fill sur un objet d'adaptateur de données (SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter ou OracleDataAdapter). Lorsque vous appelez la méthode Fill, elle transmet une instruction SQL SELECT au magasin de données.
Transmission des modifications apportées à une table de groupe de données au magasin de données correspondant.
Pour transmettre une table d'un groupe de données au magasin de données, faites appel à la méthode Update de l'adaptateur. Lorsque vous appelez cette méthode, elle exécute toutes les instructions SQL INSERT, UPDATE ou DELETE nécessaires, selon que l'enregistrement concerné est nouveau, modifié ou supprimé.
Pour plus d'informations sur l'exécution de mises à jour à l'aide d'adaptateurs de données, consultez Mise à jour de sources de données à l'aide de DataAdapters (ADO.NET).
Données en lecture seule
Si votre programme doit effectuer un balayage séquentiel en lecture seule des résultats d'une requête, vous pouvez utiliser un objet lecteur de données au lieu de remplir un groupe de données. Cet objet récupère les données de la source et les passe directement à votre application. En général, les objets lecteurs de données permettent d'effectuer des accès en lecture seule et en avant uniquement lorsque vous n'avez pas besoin de mettre en cache les données dans un groupe de données (l'adaptateur de données lui-même utilise un objet lecteur de données pour remplir un groupe de données). Par exemple, dans un Web Form affichant des informations de la base de données, la page de formulaire Web est recréée à chaque aller-retour ; il est donc souvent inutile d'enregistrer les données dans un groupe de données.
Visual Studio fournit quatre objets de lecteur de données : SqlDataReader, OleDbDataReader, OdbcDataReader et OracleDataReader. Pour plus d'informations sur l'utilisation de l'objet lecteur de données pour un accès en lecture seule efficace, consultez DataAdapters et DataReaders (ADO.NET).
Mappages de table
Par défaut, lorsque vous utilisez les outils de Visual Studio pour générer un groupe de données à partir des tables d'une base de données, le nom des tables et des colonnes est identique dans le groupe de données et dans la base de données. Cela peut parfois constituer une gêne. Par exemple, vous pouvez trouver que les noms utilisés dans la base de données sont trop succincts ou au contraire trop prolixes ; ou bien ces noms peuvent être dans une langue étrangère. Si vous travaillez avec un schéma existant, vous pouvez également trouver que les noms définis dans ce schéma ne correspondent pas à ceux qui sont utilisés dans votre base de données.
Il n'est donc pas obligatoire que les noms de la base de données correspondent à ceux du groupe de données. Au lieu de cela, vous pouvez créer de nouveaux noms de tables et de colonnes dans la commande de groupe de données, puis les mapper avec ceux de la base de données. Les adaptateurs utilisent la collection TableMappings pour maintenir la correspondance entre les structures du groupe de données (tables et colonnes de données) et celles du magasin de données (tables et colonnes). Pour plus d'informations sur les mappages de table, consultez Mappage des tables dans les adaptateurs de données.
Voir aussi
Tâches
Comment : configurer les paramètres pour des adaptateurs de données
Concepts
Remplissage d'un DataSet à partir d'un DataAdapter (ADO.NET)
Création d'applications de données à l'aide de Visual Studio
Autres ressources
DataAdapters et DataReaders (ADO.NET)
Création d'adaptateurs de données