J'utilise actuellement un DataTable pour obtenir des résultats à partir d'une base de données que je peux utiliser dans mon code.
Cependant, de nombreux exemples sur le Web montrent l'utilisation d'un DataSet à la place et l'accès à la ou aux tables via la méthode des collections.
Y a-t-il un avantage, en termes de performances ou non, à utiliser des DataSets ou des DataTables comme méthode de stockage des résultats SQL?
Réponses:
Cela dépend vraiment du type de données que vous rapportez. Étant donné qu'un DataSet est (en fait) juste une collection d'objets DataTable, vous pouvez renvoyer plusieurs ensembles distincts de données dans un seul objet, et donc plus gérable.
En termes de performances, vous êtes plus susceptible d'obtenir une inefficacité de requêtes non optimisées que d'un "mauvais" choix de construction .NET. Du moins, c'est mon expérience.
la source
Une différence majeure est que les DataSets peuvent contenir plusieurs tables et vous pouvez définir des relations entre ces tables.
Si vous ne renvoyez qu'un seul ensemble de résultats, je pense qu'un DataTable serait plus optimisé. Je pense qu'il doit y avoir une surcharge (accordée petite) pour offrir les fonctionnalités d'un DataSet et garder une trace de plusieurs DataTables.
la source
dans 1.x, il y avait des choses que DataTables ne pouvait pas faire que les DataSets pouvaient faire (je ne me souviens pas exactement de quoi). Tout cela a été changé dans 2.x. Je suppose que c'est pourquoi de nombreux exemples utilisent encore des DataSets. Les DataTables devraient être plus rapides car ils sont plus légers. Si vous ne tirez qu'un seul jeu de résultats, c'est votre meilleur choix entre les deux.
la source
Une caractéristique du DataSet est que si vous pouvez appeler plusieurs instructions de sélection dans vos procédures stockées, le DataSet aura un DataTable pour chacune.
la source
Il existe des optimisations que vous pouvez utiliser lors du remplissage d'un DataTable, comme l'appel de BeginLoadData (), l'insertion des données, puis l'appel de EndLoadData (). Cela désactive certains comportements internes dans le DataTable, tels que la maintenance des index, etc. Consultez cet article pour plus de détails.
la source
Quand vous ne traitez qu'une seule table de toute façon, la plus grande différence pratique que j'ai trouvée est que DataSet a une méthode "HasChanges" mais pas DataTable. Cependant, les deux ont un "GetChanges", vous pouvez donc l'utiliser et tester null.
la source
Un objet DataTable représente des données tabulaires sous la forme d'un cache tabulaire en mémoire de lignes, de colonnes et de contraintes. Le DataSet se compose d'une collection d'objets DataTable que vous pouvez associer les uns aux autres avec des objets DataRelation.
la source