Question

J'utilise actuellement un DataTable pour obtenir les résultats 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.

Existe-t-il un avantage, en termes de performances ou autre, à utiliser des DataSets ou des DataTables comme méthode de stockage pour les résultats SQL ?

Était-ce utile?

La solution

Cela dépend vraiment du type de données que vous rapportez.Puisqu'un DataSet n'est (en fait) qu'une collection d'objets DataTable, vous pouvez renvoyer plusieurs ensembles de données distincts en un seul objet, et donc plus gérable.

En termes de performances, vous êtes plus susceptible d'être inefficace à cause de requêtes non optimisées qu'à cause du « mauvais » choix de construction .NET.Du moins, c'est mon expérience.

Autres conseils

Une différence majeure est que les DataSets peuvent contenir plusieurs tables et que vous pouvez définir des relations entre ces tables.

Si vous ne renvoyez qu'un seul jeu de résultats, je pense qu'un DataTable serait plus optimisé.Je pense qu'il doit y avoir une certaine surcharge (accordée petite) pour offrir les fonctionnalités d'un DataSet et garder une trace de plusieurs DataTables.

dans 1.x, il y avait des choses que les DataTables ne pouvaient pas faire et que les DataSets pouvaient faire (je ne me souviens pas exactement de quoi).Tout cela a été modifié dans la version 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 ensemble de résultats, c'est votre meilleur choix entre les deux.

Une fonctionnalité du DataSet est que si vous pouvez appeler plusieurs instructions select dans vos procédures stockées, le DataSet aura un DataTable pour chacune.

Il existe certaines optimisations que vous pouvez utiliser lors du remplissage d'un DataTable, comme appeler BeginLoadData(), insérer les données, puis appeler EndLoadData().Cela désactive certains comportements internes au sein du DataTable, tels que la maintenance des index, etc.Voir Cet article pour plus de détails.

De toute façon, lorsque vous n'avez affaire qu'à une seule table, la plus grande différence pratique que j'ai trouvée est que DataSet a une méthode "HasChanges", mais pas DataTable.Les deux ont cependant un "GetChanges", vous pouvez donc l'utiliser et tester null.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top