106 votes

Tentative de lecture non valide en l'absence de données.

     private void button1_Click(object sender, EventArgs e)
    {
        string name;
        name = textBox5.Text;
        SqlConnection con10 = new SqlConnection("con strn");
        SqlCommand cmd10 = new SqlCommand("select * from sumant where username=@name");
        cmd10.Parameters.AddWithValue("@name",name);
        cmd10.Connection = con10;
        cmd10.Connection.Open();//line 7
        SqlDataReader dr = cmd10.ExecuteReader();
    }

    if ( textBox2.Text == dr[2].ToString())
    {
        //do something;
    }
 

Quand je débogue jusqu’à la ligne 7, c’est correct mais après cela, dr lève une exception: Invalid attempt to read when no data is present. Ce n'est pas possible car j'ai des données dans la table avec nom d'utilisateur = sumant. S'il vous plaît dites-moi si la déclaration 'if' est correcte ou non .........

Et comment puis-je supprimer l'erreur?

212voto

Julien Poulin Points 5406

Vous devez appeler DataReader.Read pour récupérer le résultat:

 SqlDataReader dr = cmd10.ExecuteReader();
if (dr.Read()) {
  // read data for first record here
}
 

DataReader.Read renvoie un booléen indiquant s'il y a plus de blocs de données à lire. Ainsi, si vous avez plus d'un résultat, vous pouvez faire:

 while (dr.Read()) {
  // read data for each record here
}
 

17voto

Colin Mackay Points 9303

Vous devez appeler dr.Read() avant de tenter de lire des données. Cette méthode retournera false s'il n'y a rien à lire.

9voto

Charlie Points 1056

Je viens d'avoir cette erreur, j'appelais dr.NextResult() au lieu de dr.Read() .

8voto

dougczar Points 82

Je voudrais vérifier si le SqlDataReader a des lignes retournées en premier:

 SqlDataReader dr = cmd10.ExecuteReader();
if (dr.HasRows)
{
   ...
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X