Vue d'ensemble de TableAdapter
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 précédente de Visual Studio, les adaptateurs de données ADO.NET étaient utilisés pour la communication entre une application et une base de données. Bien que les adaptateurs de données constituent toujours un composant principal des Fournisseurs de données .NET Framework, les TableAdapters sont des composants générés par le concepteur qui améliorent les fonctionnalités des DataAdapter. Les TableAdapters contiennent généralement les méthodes Fill
et Update
pour extraire et mettre à jour des 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'Configuration de source de données (Assistant). Vous pouvez également créer des TableAdapters dans des groupes de données existants avec l'Configuration de TableAdapter (Assistant) 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 programmation à un TableAdapter particulier, vous devez déclarer une nouvelle instance du TableAdapter. Par exemple :
NorthwindDataSet northwindDataSet = new NorthwindDataSet();
NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter =
new NorthwindDataSetTableAdapters.CustomersTableAdapter();
customersTableAdapter.Fill(northwindDataSet.Customers);
Dim northwindDataSet As New NorthwindDataSet()
Dim customersTableAdapter As 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
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.
Notes
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. Cela signifie que vous pouvez appeler ces méthodes individuelles à partir de votre code au lieu d'appeler TableAdapter.Update pour gérer les insertions, les mises à jour et les suppressions qui sont en attente pour la table de données associée.
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 Nullable par le TableAdapter
Les TableAdapters prennent en charge les types Nullable Nullable(Of T)
et T?
. Pour plus d'informations sur les types Nullable en Visual Basic, consultez Nullable Value Types. Pour plus d'informations sur les types Nullable en C#, consultez Utilisation de types Nullable.
Voir aussi
Procédures pas à pas relatives aux données
Comment : établir une connexion à des données d'une base de données
Procédure pas à pas : connexion à des données dans une base de données (Windows Forms)
Préparation de votre application pour recevoir des données
Extraction de données dans votre application
Liaison de contrôles à des données dans Visual Studio
Modification des données dans votre application
Validation des données
Enregistrement des données