Intento no válido de leer cuando no hay datos.

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 sumnt 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 después de eso dr arroja una excepción: Invalid attempt to read when no data is present. Eso no es posible ya que tengo datos en la tabla con nombre de usuario = sumnt. Por favor dígame si la statement ‘si’ es correcta o no ………

¿Y cómo elimino el error?

Tienes que llamar a DataReader.Read para obtener el resultado:

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

DataReader.Read() devuelve un bool indica si hay más bloques de datos para leer, por lo que si tiene más de 1 resultado, puede hacer:

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

dr.Read() llamar a dr.Read() antes de intentar leer cualquier dato. Ese método devolverá falso si no hay nada que leer.

Verificaría si el SqlDataReader tiene filas devueltas primero:

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

Acabo de tener este error, estaba llamando a dr.NextResult() lugar de dr.Read() .

Usé el código a continuación y funcionó para mí.

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

Estaba teniendo 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() } 

resuelto el problema