63 votes

Qu'est-ce qui est le mieux : DataSet ou DataReader ?

Je viens de voir ce sujet : Datatable vs Dataset mais cela n'a pas résolu mes doutes Je m'explique, je me connectais à une base de données et j'avais besoin d'afficher les résultats dans un GridView. (J'ai utilisé RecordSet lorsque j'ai travaillé avec VB6 il y a quelque temps et DataSet est assez similaire à celui-ci, il était donc beaucoup plus facile d'utiliser DataSet). Puis un type m'a dit que DataSet n'était pas la meilleure méthode pour faire .

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

218voto

Marc Gravell Points 482669

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

A DataSet est le seau ici ; il vous permet de transporter un ensemble déconnecté de données et de travailler avec lui - mais vous aurez à supporter 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 un tuyau : il fournit un accès unidirectionnel/unique aux données lorsqu'elles 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/base de données.

Et de la même manière que l'on peut remplir un seau avec un tuyau, on peut remplir le DataSet avec le lecteur de données.

Ce que j'essaie de dire, c'est qu'ils font des choses différentes...

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

0 votes

@Marc, bonne analogie. Lorsque vous ne travaillez pas avec des BLOB, quel type d'accès aux données utilisez-vous ?

1 votes

@Ash - Généralement LINQ-to-SQL, SqlBulkCopy o IDataReader . muy rarement, DataTable . Environ deux fois (jamais) en fait.

1 votes

Et plus récemment, "dapper" :)

78voto

Ahmad Mageed Points 44495

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 terminé, tandis qu'un DataSet sera un objet en mémoire. Si vous liez un contrôle à un DataReader, celui-ci reste ouvert. De plus, un DataReader est une approche de lecture de données qui ne peut être manipulée. Avec un DataSet, vous pouvez aller et venir 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, être facilement transmis à d'autres niveaux. Les DataReaders ne peuvent pas être sérialisés.

D'un autre côté, si vous avez un grand nombre de lignes à lire depuis la base de données et que vous les transmettez à un processus pour une règle de gestion, un DataReader peut être plus utile que le chargement d'un DataSet avec toutes les lignes, ce qui prend de la mémoire et peut affecter l'évolutivité.

Voici un lien qui date un peu mais qui reste utile : Contraste entre le DataReader et le DataSet d'ADO.NET .

2 votes

Le lien est cassé. Veuillez le réparer ou le supprimer.

12voto

John Saunders Points 118808

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

Vous pouvez le remplir à partir d'un fichier XML, ou simplement à partir d'un programme. Remplissez-le avec les lignes d'une base de données, puis faites demi-tour 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. C'est à vous de décider si vous l'utiliserez un jour avec une véritable base de données relationnelle.

4 votes

Pour mémoire, ceci est également vrai pour les lecteurs de données - voir "CsvReader", "DataTableReader", etc. Et pour le repousser dans une base de données, SqlBulkCopy (à titre d'exemple) fonctionnera avec DataTable ou IDataReader.

5voto

AviD Points 8413

À besoins différents, solutions différentes.

Comme vous l'avez dit, le dataset est très similaire au VB6 Recordset. C'est-à-dire qu'il permet de récupérer les données dont vous avez besoin, de les faire circuler, d'en faire ce que vous voulez. Oh, et puis finalement s'en débarrasser quand vous avez fini.

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

Donc, oui, apprenez-le - mais ne l'utilisez que lorsque c'est approprié. Dataset vous donne beaucoup plus de flexibilité.

0 votes

Merci AviD et Ahmad Mageed pour les réponses rapides Cela va me faire réfléchir (et apprendre) beaucoup sur le sujet ! :)

0voto

Martin Clarke Points 3370

Pour répondre à votre deuxième question - Oui, vous devriez apprendre à connaître les DataReaders. En tout cas, pour comprendre comment les utiliser.

Je pense qu'il est préférable dans cette situation d'utiliser des DataSets - puisque vous effectuez la liaison des données et tout le reste (je pense aux cycles du processeur par rapport à l'effort humain).

Quant à savoir lequel des deux donnera une meilleure performance. Cela dépend beaucoup de votre situation. Par exemple, si vous modifiez les données que vous liez et que vous regroupez les modifications, il est préférable d'utiliser des DataSets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X