c# - Datatable vs Dataset

Translate

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 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?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

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é des requêtes non optimisées que du "mauvais" choix de construction .NET. Du moins, c'est mon expérience.

La source
Translate

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
Translate

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
Translate

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
Translate

Vous pouvez utiliser certaines optimisations lors du remplissage d'un DataTable, telles que l'appel de BeginLoadData (), l'insertion des données, puis l'appel de EndLoadData (). Cela désactive certains comportements internes dans le DataTable, comme la maintenance des index, etc. VoirCet articlepour plus de détails.

La source
Translate

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
Translate

Un objet DataTable représente des données tabulaires sous la forme d'un cache tabulaire en mémoire de lignes, colonnes et 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