Je me demande simplement, quels éléments dois-je prendre en compte lorsque j'utilise DataReader et DataAdapter pour récupérer des données de la base de données et quelle est la différence entre les deux étant donné que le datareader nécessite une connexion ouverte et le dataadapter non... Dans nos projets, nous utilisons DataReader dans TOUT notre DAL, nous n'utilisons jamais dataadapter. Je me demande dans quel scénario il serait préférable d'utiliser le combo DataAdapter + DataTable plutôt que d'utiliser DataReader. Merci d'avance.
Réponses
Trop de publicités?DataReader : Cela est mieux utilisé lorsque vous voulez simplement récupérer des données en mode lecture seule, peupler votre entité métier et fermer le lecteur. C'est vraiment rapide.
Disons, par exemple, que vous avez une classe client et que vous voulez avoir un objet entièrement initialisé avec toutes vos propriétés de client remplies comme (Nom, Adresse, etc.)
Vous utiliserez DataReader ici et vous contenterez de peupler l'entité et de fermer le lecteur.
Vous ne pouvez pas faire de mises à jour avec un datareader.
DataAdapter : Vous pouvez lire/mettre à jour les données avec les adaptateurs de données, mais c'est moins rapide que la lecture des données avec le DataReader.
Vous pouvez mettre à jour les données avec DataAdapter mais avec le lecteur vous ne pouvez pas le faire
Je favorise presque toujours le DataReader lorsque je manipule des choses en ADO.NET également; la raison en étant qu'il ne vous oblige pas à stocker les données sur le client plus longtemps que nécessaire.
C'est également en quelque sorte la réponse à quand utiliser un DataAdapter pour un DataSet/Table; lorsque vous souhaitez stocker les données sur le client, peut-être pour y travailler de quelque manière - itérer de nouveau à travers elles, ou les manipuler en tant qu'ensemble, par opposition à simplement afficher les valeurs dans une grille, où le Reader, à mon avis, est une meilleure option.
DataReader
vous permet de traiter chaque enregistrement et de le jeter, ce qui est bon lorsque vous souhaitez traiter de nombreux enregistrements de données sans relation les uns avec les autres. Par exemple, vous pourriez utiliser DataReader
lorsque vous souhaitez calculer une valeur statistique complexe à partir de chaque enregistrement de la base de données, ou pour enregistrer de nombreux enregistrements de données dans un fichier local.
DataAdapter
est quelque chose de différent, il est capable de vous permettre d'avoir des enregistrements de données en mémoire. Cela vous permet de créer une interface graphique pour naviguer dans les données, modifier les données, etc.. C'est plus général mais ne fonctionnera pas bien avec de grands ensembles de données.
Vous ne voulez utiliser des DataAdapters que lorsque vous utilisez des DataSets.
Un adaptateur a les 2 méthodes principales Fill()
et Updater()
pour lire un jeu de données depuis et écrire dans la base de données.
Notez que Fill()
ouvrira une connexion, utilisera un DataReader pour obtenir tous les enregistrements, puis fermera la connexion.
Sans DataSets et DataTables, vous n'avez pas besoin de DataAdapters.
La vraie question est donc : Quel type de classes de stockage voulez-vous utiliser dans votre DAL ? Les DataSets sont viables et simples mais c'est une technologie vieillissante (plus en cours d'amélioration).
Peut-être devriez-vous chercher une bibliothèque ORM (Object Relational Mapping). Mais cela remplacera votre question sur DataReader/Adapter par un choix beaucoup plus compliqué.
Je n'utilise jamais DataReader.
Comme je superpose fortement mon application, mon DAL est responsable de la communication avec la base de données et mon BLL est responsable de la construction des objets, il n'y a donc aucun moyen pour le BLL de fermer le DataReader une fois terminé. Au lieu de cela, le BLL demande un DataSet/DataTable au DAL, que le DAL satisfait. Il le fait en effectuant un Fill (à noter pour TomTom > regardez la pile d'exécution et oui, vous verrez un DataReader dedans). Le BLL fait ensuite ce qu'il veut avec le jeu de résultats.
- Réponses précédentes
- Plus de réponses