SqlDataAdapter vs SqlDataReader

Quelles sont les différences entre l’utilisation de SqlDataAdapter et SqlDataReader pour obtenir des données à partir d’une firebase database?

Je me penche spécifiquement sur leurs avantages et inconvénients ainsi que sur leurs performances en termes de vitesse et de mémoire.

Merci

SqlDataReader:

  • Maintient la connexion ouverte jusqu’à ce que vous ayez terminé (n’oubliez pas de la fermer!).
  • Ne peut généralement être itéré qu’une fois
  • N’est pas aussi utile pour la mise à jour de la firebase database

Par contre, il:

  • Un seul enregistrement en mémoire à la fois plutôt qu’un jeu de résultats complet (cela peut être énorme)
  • Est à peu près aussi rapide que vous pouvez obtenir pour cette itération
  • Vous permet de commencer à traiter les résultats plus rapidement (une fois que le premier enregistrement est disponible)

SqlDataAdapter / DataSet

  • Vous permet de fermer la connexion dès que le chargement des données est terminé, et peut même le fermer automatiquement pour vous
  • Tous les résultats sont disponibles en mémoire
  • Vous pouvez le parcourir autant de fois que nécessaire ou même rechercher un enregistrement spécifique par index
  • Possède des facultés intégrées pour la mise à jour de la firebase database

Au prix de:

  • Utilisation de mémoire beaucoup plus élevée
  • Vous attendez que toutes les données soient chargées avant de les utiliser

Donc, cela dépend vraiment de ce que vous faites, mais j’ai tendance à préférer un DataReader jusqu’à ce que j’aie besoin de quelque chose qui n’est supporté que par un jeu de données. SqlDataReader est parfait pour le cas commun d’access aux données de liaison à une grid en lecture seule.

La réponse à cela peut être assez large.

Essentiellement, la différence majeure pour moi qui influence généralement mes décisions concernant l’utilisation d’un SQLDataReader, c’est que vous «diffusez» des données depuis la firebase database. Avec un SQLDataAdapter, vous extrayez les données de la firebase database dans un object pouvant être lui-même interrogé, ainsi que dans les opérations CRUD.

De toute évidence, avec un stream de données, SQLDataReader est BEAUCOUP plus rapide, mais vous ne pouvez traiter qu’un seul enregistrement à la fois. Avec un SQLDataAdapter, vous disposez d’une collection complète des lignes correspondantes à votre requête à partir de la firebase database pour utiliser / passer votre code.

AVERTISSEMENT: Si vous utilisez un SQLDataReader, TOUJOURS, TOUJOURS, assurez-vous toujours que vous écrivez le code approprié pour fermer la connexion puisque vous gardez la connexion ouverte avec le SQLDataReader. Si vous ne le faites pas ou si vous ne gérez pas correctement les erreurs pour fermer la connexion en cas d’erreur dans le traitement des résultats, votre application subira des fuites de connexion.

Pardon mon VB, mais c’est la quantité minimum de code que vous devriez avoir en utilisant un SqlDataReader:

Using cn As New SqlConnection("..."), _ cmd As New SqlCommand("...", cn) cn.Open() Using rdr As SqlDataReader = cmd.ExecuteReader() While rdr.Read() ''# ... End While End Using End Using 

équivalent C #:

 using (var cn = new SqlConnection("...")) using (var cmd = new SqlCommand("...")) { cn.Open(); using(var rdr = cmd.ExecuteReader()) { while(rdr.Read()) { //... } } } 

Un SqlDataAdapter est généralement utilisé pour remplir un DataSet ou un DataTable et vous aurez ainsi access aux données après la fermeture de votre connexion (access déconnecté).

Le SqlDataReader est un curseur rapide et connecté rapide qui tend à être généralement plus rapide que de remplir un DataSet / DataTable.

De plus, avec un SqlDataReader, vous traitez vos données un enregistrement à la fois et ne stockez aucune donnée en mémoire. De toute évidence, avec un DataTable ou un DataSet, vous avez une surcharge de mémoire.

Si vous n’avez pas besoin de conserver vos données en mémoire, alors, pour le rendu uniquement, optez pour SqlDataReader. Si vous souhaitez gérer vos données de manière déconnectée, choisissez DataAdapter pour remplir un DataSet ou un DataTable.

Utilisez un SqlDataAdapter lorsque vous souhaitez remplir un DataSet / DataTable en mémoire à partir de la firebase database. Vous avez ensuite la possibilité de fermer / éliminer la connexion, de transmettre le fichier datatable / set en mémoire. Vous pouvez ensuite manipuler les données et les conserver dans la firebase database à l’aide de l’adaptateur de données, conjointement avec InsertCommand / UpdateCommand.

Utilisez un SqlDataReader lorsque vous souhaitez accéder rapidement à des données à faible empreinte mémoire sans avoir besoin de flexibilité pour, par exemple, transmettre les données autour de votre logique métier. Ceci est plus optimal pour une récupération rapide et à faible utilisation de mémoire de volumes de données importants, car il ne charge pas toutes les données en une seule fois – avec l’approche SqlDataAdapter, le DataSet / DataTable serait rempli avec toutes les données. Il y a beaucoup de lignes et de colonnes, ce qui nécessitera beaucoup de mémoire.