web-dev-qa-db-fra.com

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;
    }

Lorsque 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?

71
knowledgehunter

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() retourne un bool indiquant s'il y a plus de blocs de données à lire, donc si vous avez plus d'un résultat, vous pouvez faire:

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

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.

17
Colin Mackay

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

9
Charlie

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

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

J'ai utilisé le code ci-dessous et cela a fonctionné pour moi.

String email="";
    SqlDataReader reader=cmd.ExecuteReader();
    if(reader.Read()){
        email=reader["Email"].ToString();
    }

String To=email;
3
Aneel Goplani

J'avais 2 valeurs qui pourraient contenir des valeurs nulles.

while(dr.Read())
 {
    Id = dr["Id"] as int? ?? default(int?);
    Alt =  dr["Alt"].ToString() as string ?? default(string);
    Name = dr["Name"].ToString()
 }

résolu le problème

1
Dev