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?
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
}
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.
Je viens d'avoir cette erreur, j'appelais dr.NextResult()
au lieu de dr.Read()
.
Je voudrais vérifier si le SqlDataReader a des lignes retournées en premier:
SqlDataReader dr = cmd10.ExecuteReader();
if (dr.HasRows)
{
...
}
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;
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