web-dev-qa-db-fra.com

Quoi de mieux: DataSet ou DataReader?

Je viens de voir ce sujet: Datatable vs Dataset mais cela n'a pas résolu mon doute .. Je m'explique mieux, je faisais la connexion avec la base de données et j'avais besoin d'afficher les résultats dans une GridView. (J'ai utilisé RecordSet lorsque je travaillais avec VB6 il y a quelque temps et DataSet est assez similaire, donc c'était beaucoup plus facile d'utiliser DataSet.) Ensuite, un gars m'a dit que DataSet n'était pas la meilleure méthode à faire ..

Alors, dois-je "apprendre" DataReader ou continuer à utiliser DataSet? DataTable? Quels sont les avantages/inconvénients?

52
Daniel

Cela dépend de vos besoins. L'une des différences les plus importantes est qu'un DataReader conservera une connexion ouverte à votre base de données jusqu'à ce que vous en ayez fini tandis qu'un DataSet sera un objet en mémoire. Si vous liez un contrôle à un DataReader, il est toujours ouvert. En outre, un DataReader est une approche directe de lecture de données qui ne peuvent pas être manipulées. Avec un DataSet, vous pouvez vous déplacer d'avant en arrière et manipuler les données comme bon vous semble.

Quelques fonctionnalités supplémentaires: les DataSets peuvent être sérialisés et représentés en XML et, par conséquent, facilement transmis à d'autres niveaux. Les DataReaders ne peuvent pas être sérialisés.

D'un autre côté, si vous avez une grande quantité de lignes à lire dans la base de données que vous transférez à un processus pour une règle métier, un DataReader peut avoir plus de sens plutôt que de charger un DataSet avec toutes les lignes, occupant de la mémoire et affectant éventuellement évolutivité.

Voici un lien un peu daté mais toujours utile: Contraste du DataReader et du DataSet ADO.NET .

73
Ahmad Mageed

C'est essentiellement: "qu'est-ce qui est mieux: un seau ou un tuyau?"

Un DataSet est le compartiment ici; il vous permet de transporter un ensemble de données déconnecté et de travailler avec - mais vous encourrez le coût du transport du seau (il est donc préférable de le garder à une taille avec laquelle vous êtes à l'aise).

Un lecteur de données est le tuyau: il fournit un accès unidirectionnel/unique aux données qui passent devant vous; vous n'avez pas besoin de transporter toute l'eau disponible en même temps, mais elle doit être connectée au robinet/à la base de données.

Et de la même manière que vous pouvez remplir un seau avec un tuyau, vous pouvez remplir le DataSet avec le lecteur de données.

Le point que j'essaye de faire est qu'ils font des choses différentes ...

Je n'utilise pas personnellement DataSet très souvent - mais certaines personnes les aiment. Cependant, j'utilise des lecteurs de données pour l'accès BLOB, etc.

200
Marc Gravell

Suite à Marc's point: vous pouvez utiliser un DataSet sans aucune base de données.

Vous pouvez le remplir à partir d'un fichier XML ou simplement à partir d'un programme. Remplissez-le avec des lignes d'une base de données, puis retournez-le et écrivez-le dans une autre base de données.

Un DataSet est une représentation totalement en mémoire d'un schéma relationnel. Que vous l'utilisiez ou non avec une base de données relationnelle réelle dépend de vous.

12
John Saunders

Différents besoins, différentes solutions.

Comme vous l'avez dit, le jeu de données est le plus similaire au jeu d'enregistrements VB6. Autrement dit, tirez vers le bas les données dont vous avez besoin, faites-les circuler, faites-en ce que vous voulez. Oh, et finalement, débarrassez-vous-en lorsque vous avez terminé.

Le lecteur de données est plus limité, mais il offre BEAUCOUP de meilleures performances lorsque tout ce dont vous avez besoin est de lire les données une fois. Par exemple, si vous remplissez vous-même une grille - c'est-à-dire, tirez les données, parcourez-les, pour chaque ligne remplissez la grille, puis jetez les données - le lecteur de données est bien meilleur que l'ensemble de données. D'un autre côté, n'essayez même pas d'utiliser le datareader si vous avez l'intention de mettre à jour les données ...

Alors, oui, apprenez-le - mais utilisez-le uniquement lorsque cela est approprié. L'ensemble de données vous donne beaucoup plus de flexibilité.

5
AviD

Pour répondre à votre deuxième question - Oui, vous devez en savoir plus sur DataReaders. Si quoi que ce soit, vous comprenez donc comment les utiliser.

Je pense que vous êtes mieux dans cette situation en utilisant DataSets - puisque vous faites la liaison de données et tout (je pense les cycles CPU vs l'effort humain).

Quant à celui qui donnera une meilleure performance. Cela dépend beaucoup de votre situation. Par exemple, si vous modifiez les données que vous liez et regroupez les modifications, vous serez mieux avec DataSets

0
Martin Clarke

DataReader vs Dataset

1) - DataReader est conçu dans l'architecture orientée connexion
- DataSet est conçu dans l'architecture déconnectée

2) - DataReader donne un accès direct aux données
- DataSet permet une navigation par défilement vers les données

3) - DataReader est en lecture seule, nous ne pouvons pas apporter de modifications aux données présentes sous celui-ci
- DataSet peut être mis à jour, nous pouvons apporter des modifications aux données présentes et renvoyer ces modifications à la source de données

4) - DataReader ne fournit pas d'options comme la recherche et le tri des données
- DataSet fournit des options telles que la recherche et le tri des données

0
siddu patil