web-dev-qa-db-fra.com

Devrait si appeler SqlDataReader.HasRows si j'appelle SqlReader.Read

Essayer de voir s'il est avantageux d'ajouter une fonction if (dr.HasRows) avant la fonction while (dr.read()). Je veux dire, techniquement, si elle n'a pas de lignes, elle ne va pas être lue, alors cela aurait-il de l'importance si vous avez vérifié cela en premier?

using (SqlDataReader dr = cmd.ExecuteReader())
{
    if (dr.HasRows)
    {
        while (dr.Read())
        {
            ....do stuff here
        }
    }
}

ou est-ce que cela va essentiellement faire exactement la même chose si vous vous assurez simplement qu'il a des valeurs à fournir ...

using (SqlDataReader dr = cmd.ExecuteReader())
{
    while (dr.Read())
    {
        ....do stuff here
    }
}    
21
Joshua Volearix

Non .. Il n'est pas obligatoire de vérifier (dr.HasRows) Si le DataReader contient ou non une ligne.

Read() renverra False s'il n'y a plus de lignes à récupérer, mais Reader.HasRows est beaucoup plus révélateur de ce qu'il fait que Read() ce serait donc une bonne ( bonne pratique d'utiliser Reader.HasRows car vous pourriez accidentellement faire autre chose que Read() qui peut tomber en exception.

14
Vishal Suthar

Faites attention. HasRows () renvoie false pour ma requête CTE, même s'il y a des lignes (437 lignes en fait).

5
Chalky

Il n'est pas obligatoire de vérifier si le DataReader a des lignes (dr.HasRows). La méthode Read () retournera true s'il y a plus de données à lire et false s'il n'y en a plus, rompant ainsi la boucle while.

2
Abbas

Je pense que c'est principalement pour les procédures stockées qui peuvent ou non avoir des données (un ou plusieurs jeux de résultats) et il est "plus facile" de vérifier d'abord au cas où vous feriez aussi autre chose que la boucle while (c'est-à-dire initialiser l'en-tête/pied de page, etc. lorsqu'il y a des données).

1
TomTom