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;
}
Cuando depuro hasta la línea 7, está bien, pero luego el Dr. lanza una excepción:
Invalid attempt to read when no data is present.
eso no es posible porque tengo datos en la tabla con username = sumant. Por favor dígame si la declaración 'si' es correcta o no .........
¿Y cómo elimino el error?
dr.Read()
. Entonces, si la consulta no devuelve registros, el error es el mismo: "Intento de lectura no válido cuando no hay datos presentes". En su lugar, useif(dr.Read()){....}
(o un bucle como se muestra a continuación).Tienes que llamar
dr.Read()
antes de intentar leer cualquier dato. Ese método devolverá falso si no hay nada para leer.fuente
Acabo de tener este error, estaba llamando en
dr.NextResult()
lugar dedr.Read()
.fuente
Verificaría si el SqlDataReader tiene filas devueltas primero:
SqlDataReader dr = cmd10.ExecuteReader(); if (dr.HasRows) { ... }
fuente
Usé el siguiente código y funcionó para mí.
String email=""; SqlDataReader reader=cmd.ExecuteReader(); if(reader.Read()){ email=reader["Email"].ToString(); } String To=email;
fuente
Tenía 2 valores que podrían contener valores nulos.
while(dr.Read()) { Id = dr["Id"] as int? ?? default(int?); Alt = dr["Alt"].ToString() as string ?? default(string); Name = dr["Name"].ToString() }
resolvió el problema
fuente