2010-10-06 3 views
1

La méthode de lecture se positionne-t-elle simplement sur l'enregistrement suivant? ou il lit réellement le disque?SqlDataReader Méthode de lecture

disons que j'appelle lire 1000 fois, est-ce qu'il obtient réellement toutes les valeurs de chaque enregistrement? ou c'est quand j'appelle GetValue?

Répondre

2

La méthode read passe à l'enregistrement suivant et récupère les données. Ainsi, lorsque vous appelez GetValue, les données sont prêtes et vous attendent.

2

Oui, il lit les données d'enregistrement dans un tampon local (client). Puis GetValue() le trouve dans ce tampon et vous le remet. Votre question semble se poser: «Puis-je obtenir l'enregistrement # 1000 sans déplacer les 999 premières lignes de données du SGBD vers le client», auquel cas: pas de cette façon.

Modifier

Quand je ne peux pas implémenter la pagination dans les requêtes ou dans une procédure stockée (ce qui est souvent le cas), et les données par ligne est grande, je fais la requête renvoie les données minimales absolues (telles qu'une clé primaire) et récupère les lignes une par une.

+0

ouais, c'est exactement cela, en essayant de se déplacer à une certaine position et commence à lire X numéro d'enregistrement. Essayant fondamentalement d'implémenter la pagination de données avec le lecteur de données. – pdiddy

+0

Approche intéressante pour le PK, merci. Mais je pense que je vais devoir aller avec la procédure stockée. – pdiddy

0

Ce qu'il fait est défini par l'implémentation. Cependant, en considérant l'utilisation normale, la méthode la plus efficace serait de loin d'obtenir toutes les 1000 lignes de la base de données. Accordé que c'est moins efficace lorsque vous n'utilisez pas les données dans ces lignes, mais considérez l'alternative où il a obtenu chaque ligne séparément et ensuite imaginez l'impact lorsque vous avez utilisé ces lignes.

Questions connexes