Interroger des jeux de données dans des applications .NET Framework
Remarque
Les jeux de données et les classes associées sont des technologies .NET Framework héritées qui datent du début des années 2000. Elles 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. Ces technologies sont particulièrement utiles aux applications qui permettent aux utilisateurs de modifier des données, et de rendre ces changements persistants dans la base de données. Même si les jeux de données sont une technologie très efficace, nous vous recommandons d’utiliser Entity Framework Core pour les nouvelles applications .NET. Entity Framework offre un moyen plus naturel d’utiliser des données tabulaires en tant que modèles objet. De plus, il présente une interface de programmation plus simple.
Pour rechercher des enregistrements spécifiques dans un jeu de données, utilisez la méthode FindBy
sur DataTable, écrivez votre propre instruction foreach pour effectuer une boucle sur la collection Lignes de la table ou utilisez LINQ to DataSet.
Respect de la casse du jeu de données
Dans un jeu de données, les noms de table et de colonnes ne respectent pas la casse par défaut, c'est-à-dire qu'une table dans un jeu de données appelée « Clients » peut également être appelée « clients ». Cela correspond aux conventions d'affectation de noms dans de nombreuses bases de données, notamment SQL Server. Dans SQL Server, le comportement par défaut repose sur le fait que les noms des éléments de données ne peuvent pas être distingués uniquement par cas.
Notes
Contrairement aux jeux de données, les documents XML respectent la casse, de sorte que les noms des éléments de données définis dans les schémas respectent la casse. Par exemple, le protocole de schéma permet au schéma de définir une table appelée Customers
et une autre table appelée customers
. Cela peut entraîner des collisions de noms lorsqu'un schéma qui contient des éléments qui diffèrent que par la casse est utilisé pour générer une classe de jeu de données.
Toutefois, la sensibilité de la casse peut être un facteur dans la façon dont les données sont interprétées dans le jeu de données. Par exemple, si vous filtrez des données dans une table de jeux de données, les critères de recherche peuvent retourner des résultats différents selon que la comparaison respecte la casse. Vous pouvez contrôler la sensibilité de la casse du filtrage, de la recherche et du tri en définissant la propriété du jeu de données CaseSensitive. Toutes les tables du jeu de données héritent par défaut de la valeur de cette propriété. (Vous pouvez remplacer cette propriété pour chaque table individuelle en définissant la propriété CaseSensitive de la table.)
Rechercher une ligne spécifique dans une table de données
Rechercher une ligne dans un jeu de données typé avec une valeur de clé primaire
Pour localiser une ligne, appelez la méthode fortement typée
FindBy
qui utilise la clé primaire de la table.Dans l’exemple suivant, la colonne
CustomerID
est la clé primaire de la tableCustomers
. Cela signifie que la méthode généréeFindBy
estFindByCustomerID
. L’exemple montre comment affecter une variable spécifique DataRow à l’aide de la méthode généréeFindBy
.
Pour rechercher une ligne dans un jeu de données non typé avec une valeur de clé primaire
Appelez la méthode Find d’une collection DataRowCollection, en passant la clé primaire en tant que paramètre.
L’exemple suivant montre comment déclarer une nouvelle ligne appelée
foundRow
et l’affecter à la valeur de retour de la méthode Find. Si la clé primaire est trouvée, le contenu de l’index de colonne 1 s’affiche dans une boîte de message.
Rechercher des lignes par valeurs de colonne
Rechercher des lignes en fonction des valeurs de n’importe quelle colonne
Les tables de données sont créées avec la méthode Select, qui retourne un tableau de DataRow en fonction de l’expression passée à la méthode Select. Pour plus d’informations sur la création d’expressions valides, consultez la section « Syntaxe d’expression » de la page sur la propriété Expression.
L’exemple suivant montre comment utiliser la méthode Select de la méthode DataTable pour localiser des lignes spécifiques.
Accéder aux enregistrements associés
Lorsque les tables d’un jeu de données sont associées, un objet DataRelation peut rendre les enregistrements associés disponibles dans une autre table. Par exemple, un jeu de données contenant Customers
et des tables Orders
peuvent être mis à disposition.
Vous pouvez utiliser un objet DataRelation pour localiser les enregistrements associés en appelant la méthode GetChildRows d’une table parente DataRow. Cette méthode retourne un tableau d’enregistrements enfants associés. Vous pouvez également appeler la méthode GetParentRow d’une table enfant DataRow. Cette méthode retourne une valeur unique DataRow à partir de la table parente.
Cette page fournit des exemples utilisant des jeux de données typés. Pour plus d’informations sur la navigation dans les relations dans des jeux de données non typés, consultez Navigation dans DataRelations.
Notes
Si vous travaillez dans une application Windows Forms et que vous utilisez les fonctionnalités de liaison de données pour afficher des données, le formulaire généré par le concepteur peut fournir suffisamment de fonctionnalités pour votre application. Pour plus d’informations, consultez Lier des contrôles aux données dans Visual Studio. Plus précisément, consultez Relations dans les jeux de données.
Les exemples de code suivants montrent comment naviguer vers le haut et vers le bas dans les jeux de données typés. Les exemples de code utilisent les DataRow (NorthwindDataSet.OrdersRow
) typés et les méthodes FindBy PrimaryKey (FindByCustomerID
) générées pour localiser une ligne souhaitée et retourner les enregistrements associés. Les exemples compilent et s’exécutent correctement uniquement si vous avez :
Une instance d’un jeu de données nommé
NorthwindDataSet
avec une tableCustomers
.Une table
Orders
.Une relation nommée
FK_Orders_Customers
relative aux deux tables.
En outre, les deux tables doivent être remplies de données pour que tous les enregistrements soient retournés.
Pour retourner les enregistrements enfants d’un enregistrement parent sélectionné
Appelez la méthode GetChildRows d’une ligne de données spécifique
Customers
et retournez un tableau de lignes à partir de la tableOrders
:
Retourner l’enregistrement parent d’un enregistrement enfant sélectionné
Appelez la méthode GetParentRow d’une ligne de données spécifique
Orders
et retournez une seule ligne à partir de la tableCustomers
: