Vue d'ensemble de TableAdapter

Mise à jour : novembre 2007

Les TableAdapters fournissent la communication entre votre application et une base de données. Plus particulièrement, un TableAdapter se connecte à une base de données, exécute des requêtes ou des procédures stockées sur la base de données et retourne une nouvelle table de données remplie avec les données retournées ou remplit un DataTable existant avec les données retournées. Les TableAdapters sont également utilisés pour renvoyer les données mises à jour de votre application à la base de données.

Les utilisateurs de versions antérieures de Visual Studio peuvent considérer un TableAdapter comme un DataAdapter avec un objet de connexion intégré et la capacité de contenir plusieurs requêtes. Chaque requête ajoutée à un TableAdapter est exposée en tant que méthode publique et peut être appelée simplement comme toute autre méthode ou fonction sur un objet.

Outre les fonctionnalités standard d'un DataAdapter, les TableAdapters fournissent des méthodes typées supplémentaires qui encapsulent des requêtes partageant un schéma commun avec le DataTable typé associé. En d'autres termes, vous pouvez posséder autant de requêtes que vous le souhaitez sur un TableAdapter aussi longtemps qu'elles retournent des données respectant le même schéma.

Dans la version antérieure de Visual Studio, Adaptateurs de données ADO.NET étaient utilisés pour la communication entre une application et une base de données. Alors que les adaptateurs de données sont toujours un composant principal des .Fournisseurs de données .NET Framework (ADO.NET), les TableAdapters sont des composants générés par le concepteur qui étendent les fonctionnalités des DataAdapters. Les TableAdapters contiennent généralement les méthodes Fill et Update pour extraire et mettre à jour les données dans une base de données.

Les TableAdapters sont créés à l'aide du Concepteur de DataSet au sein de groupes de données fortement typés. Vous pouvez créer des TableAdapters lors de la création d'un nouveau groupe de données à l'aide de l'Assistant Configuration de source de données. Vous pouvez également créer des TableAdapters dans des groupes de données existants avec l'Assistant Configuration de TableAdapter ou en faisant glisser des objets de base de données depuis l'Explorateur de serveurs jusqu'au Concepteur de DataSet. Pour plus d'informations, consultez Comment : créer des TableAdapters.

Alors que les TableAdapters sont créés à l'aide du Concepteur de DataSet, les classes TableAdapter générées ne sont pas créées en tant que classes imbriquées du DataSet. Elles se trouvent dans un espace de noms distinct spécifique à chaque groupe de données. Par exemple, si vous possédez un groupe de données nommé NorthwindDataSet, les TableAdapters associés aux DataTables dans le NorthwindDataSet se trouvent dans l'espace de noms NorthwindDataSetTableAdapters. Pour accéder par programme à un TableAdapter particulier, vous devez déclarer une nouvelle instance du TableAdapter. Par exemple :

Dim northwindDataSet As New NorthwindDataSet()
Dim customersTableAdapter As New NorthwindDataSetTableAdapters.CustomersTableAdapter()

customersTableAdapter.Fill(northwindDataSet.Customers)
NorthwindDataSet northwindDataSet = new NorthwindDataSet();

NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter = 
    new NorthwindDataSetTableAdapters.CustomersTableAdapter();

customersTableAdapter.Fill(northwindDataSet.Customers);

Schéma du DataTable associé

Lors de la création d'un TableAdapter, la requête ou la procédure stockée initiale est utilisée pour définir le schéma du DataTable associé au TableAdapter. Pour exécuter cette requête ou procédure stockée initiale, appelez la méthode Fill principale du TableAdapter (qui remplit le DataTable associé au TableAdapter). Toute modification apportée à la requête principale du TableAdapter est répercutée dans le schéma de la table de données associée. Par exemple, la suppression d'une colonne de la requête principale entraîne la suppression de cette colonne de la table de données associée. Si des requêtes supplémentaires sur le TableAdapter utilisent des instructions SQL retournant des colonnes qui ne sont pas dans la requête principale, le concepteur tente de synchroniser les modifications des colonnes entre la requête principale et toute requête supplémentaire. Pour plus d'informations, consultez Comment : modifier des TableAdapters.

Commandes de mise à jour du TableAdapter

Les fonctionnalités de mise à jour d'un TableAdapter dépendent de la quantité d'informations disponibles en fonction de la requête principale fournie dans l'Assistant Configuration de requêtes TableAdapter. Par exemple, les TableAdapters configurés pour extraire des valeurs de plusieurs tables (jointures), des valeurs scalaires, des vues ou les résultats de fonctions d'agrégation ne sont pas créés initialement avec la capacité de renvoyer des mises à jour à la base de données sous-jacente. Toutefois, vous pouvez configurer les commandes INSERT, UPDATE et DELETE manuellement dans la fenêtre Propriétés.

Requêtes TableAdapter

TableAdapter avec plusieurs requêtes

Contrairement aux adaptateurs de données standard, les TableAdapters peuvent contenir plusieurs requêtes pour remplir les tables de données qui leur sont associées. Vous pouvez définir pour un TableAdapter autant de requêtes que l'exige votre application aussi longtemps que chaque requête retourne des données respectant le même schéma que la table de données qui lui est associée. Cela permet de charger les données qui répondent à différents critères. Par exemple, si votre application contient une table de clients, vous pouvez créer une requête qui remplit la table avec chaque client dont le nom commence par une certaine lettre, et une autre requête qui remplit la table avec tous les clients possédant le même état. Pour remplir une table Customers avec les clients possédant un état donné, vous pouvez créer une requête FillByState qui prend un paramètre pour la valeur d'état (SELECT * FROM Customers WHERE State = @State). Pour exécuter la requête, vous devez appeler la méthode FillByState et passer la valeur du paramètre comme suit : CustomerTableAdapter.FillByState("WA"). Pour plus d'informations, consultez Comment : créer des requêtes TableAdapter.

Outre les requêtes qui retournent des données du même schéma que la table de données d'un TableAdapter, vous pouvez ajouter des requêtes qui retournent des valeurs scalaires (uniques). Par exemple, la création d'une requête qui retourne un nombre de clients (SELECT Count(*) From Customers) est valide pour un CustomersTableAdapter, même si les données retournées ne respectent pas le schéma de la table.

Propriété ClearBeforeFill

Le TableAdapter ajoute une propriété non disponible à la classe DataAdapter de base. Par défaut, chaque fois que vous exécutez une requête pour remplir la table de données d'un TableAdapter, les données sont effacées et seuls les résultats de la requête sont chargés dans la table. Affectez à la propriété ClearBeforeFill du TableAdapter la valeur false si vous souhaitez ajouter ou fusionner les données retournées par une requête aux données existantes dans une table de données. Que vous effaciez ou non les données, vous devez renvoyer explicitement les mises à jour à la base de données, le cas échéant. Ainsi, n'oubliez pas d'enregistrer toute modification apportée aux données dans la table avant d'exécuter une autre requête qui remplit la table. Pour plus d'informations, consultez Comment : mettre à jour les données à l'aide d'un TableAdapter.

Héritage des TableAdapters

Les TableAdapters étendent les fonctionnalités des adaptateurs de données standard en encapsulant un DataAdapter configuré. Par défaut, le TableAdapter hérite de Component et ne peut pas être casté en classe DataAdapter. Effectuer un cast de TableAdapter en DataAdapter entraîne InvalidCastException. Pour modifier la classe de base d'un TableAdapter, vous pouvez taper une classe qui dérive de Component dans la propriété Base Class du TableAdapter contenu dans le Concepteur de DataSet.

Méthodes et propriétés du TableAdapter

La classe TableAdapter ne fait pas partie du .NET Framework, et vous ne pouvez donc pas le chercher dans la documentation ou dans l'Explorateur d'objets. Il est créé au moment du design lorsque vous utilisez l'un des Assistants mentionnés ci-dessus. Le nom assigné à un TableAdapter lors de sa création se base sur le nom de la table que vous utilisez. Par exemple, si vous créez un TableAdapter basé sur une table contenue dans une base de données nommée Orders, le TableAdapter est nommé OrdersTableAdapter. Le nom de classe du TableAdapter peut être modifié à l'aide de la propriété Name dans le Concepteur de DataSet.

Vous trouverez ci-dessous les méthodes et propriétés fréquemment utilisées des TableAdapters :

Membre

Description

TableAdapter.Fill

Remplit la table de données associée au TableAdapter avec les résultats de la commande SELECT du TableAdapter. Pour plus d'informations, consultez Comment : remplir de données un groupe de données.

TableAdapter.Update

Renvoie des modifications à la base de données et retourne un entier représentant le nombre de lignes affectées par la mise à jour. Pour plus d'informations, consultez Comment : mettre à jour les données à l'aide d'un TableAdapter.

TableAdapter.GetData

Retourne un nouveau DataTable rempli avec des données.

TableAdapter.Insert

Crée une nouvelle ligne dans la table de données. Pour plus d'informations, consultez Comment : ajouter des lignes à un DataTable.

TableAdapter.ClearBeforeFill

Détermine si une table de données doit être vidée avant d'appeler l'une des méthodes Fill.

Méthode Update du TableAdapter

Les TableAdapters utilisent des commandes de données pour lire et écrire dans la base de données. La requête Fill (principale) initiale du TableAdapter est utilisée comme base pour créer le schéma de la table de données associée, ainsi que les commandes InsertCommand, UpdateCommand et DeleteCommand associées à la méthode TableAdapter.Update. Cela signifie que l'appel à la méthode Update d'un TableAdapter exécute les instructions créées lors de la configuration originale du TableAdapter, et aucune des requêtes supplémentaires ajoutées avec l'Assistant Configuration de requêtes TableAdapter.

Lorsque vous utilisez un TableAdapter, il effectue avec les commandes les mêmes opérations que vous pourriez effectuer vous-même. Par exemple, lorsque vous appelez la méthode Fill de l'adaptateur, celui-ci exécute la commande de données de sa propriété SelectCommand et utilise un lecteur de données (par exemple SqlDataReader) pour charger le jeu de résultats inséré dans la table de données. De même, lorsque vous appelez la méthode Update de l'adaptateur, il exécute la commande appropriée (celle des propriétés UpdateCommand, InsertCommand et DeleteCommand) pour chaque enregistrement modifié de la table de données.

Remarque :

Si la requête principale contient suffisamment d'informations, les commandes InsertCommand, UpdateCommand et DeleteCommand sont créées par défaut lors de la génération du TableAdapter. Si la requête principale du TableAdapter est davantage qu'une instruction SELECT de table unique, il est possible que le concepteur ne soit pas capable de générer les commandes InsertCommand, UpdateCommand et DeleteCommand. Si ces commandes ne sont pas générées, une erreur peut s'afficher lors de l'exécution de la méthode TableAdapter.Update.

GenerateDbDirectMethods de TableAdapter

Outre InsertCommand, UpdateCommand et DeleteCommand, les TableAdapters sont créés avec des méthodes qui peuvent être exécutées directement sur la base de données. Ces méthodes (TableAdapter.Insert, TableAdapter.Update et TableAdapter.Delete) peuvent être appelées directement pour manipuler des données dans la base de données.

Si vous ne souhaitez pas créer ces méthodes directes, affectez à la propriété GenerateDbDirectMethods du TableAdapter la valeur false dans la fenêtre Propriétés. Les requêtes supplémentaires ajoutées au TableAdapter sont des requêtes autonomes (elles ne génèrent pas ces méthodes).

Prise en charge des types qui autorisent la valeur Null par le TableAdapter

Les TableAdapters prennent en charge les types qui autorisent la valeur Null Nullable(Of T) et T?. Pour plus d'informations sur les types qui autorisent la valeur Null en Visual Basic, consultez Types valeur nullables. Pour plus d'informations sur les types qui autorisent la valeur Null en C#, consultez Utilisation de types nullables (Guide de programmation C#).

Voir aussi

Tâches

Comment : établir une connexion à des données d'une base de données

Procédure pas à pas : connexion aux données dans une base de données

Concepts

Nouveautés des données

Autres ressources

Procédures pas à pas relatives aux données

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

Validation des données

Enregistrement des données