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
}
}
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.
Faites attention. HasRows () renvoie false pour ma requête CTE, même s'il y a des lignes (437 lignes en fait).
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.
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).