while read executereader data c# sqldatareader

c# - executereader - Cómo verificar si SQLDataReader no tiene filas



read data sqldatareader c# (4)

Por alguna razón, cuando while dr.Read() una vez que llega al while dr.Read() código sale si no tiene un resultado de retorno

Creo que lo que está viendo aquí es que SQLDataReader.Read() devuelve false si no hay un siguiente, o en este caso un primer registro para leer.

Como han respondido otros, use la propiedad HasRows para determinar si tiene alguna fila en el conjunto de resultados. Dependiendo de lo que necesite lograr, es posible que desee aprovechar el hecho de que, de hecho, Read() devuelve false la primera vez que se solicita un conjunto de resultados vacío.

Estoy intentando averiguar cómo comprobar si mi SqlDataReader es nulo o no tiene filas (lo que significa que la reserva no existe) y luego mostrar un cuadro de mensaje. Por alguna razón, cuando While dr.Read()) una vez que toca el While dr.Read()) , sale si no tiene un resultado de retorno.

He intentado colocar este código en algunas ubicaciones diferentes pero ninguno parece disparar el buzón de mensajes si no se devuelven registros

if (dr.GetValue(0) == DBNull.Value || !dr.HasRows) { MessageBox.Show("Reservation Number Does Not Exist","Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } else { (read records) }

Mi código...

try { using (SqlConnection con = new SqlConnection(connectionString)) { using (SqlCommand cmd = con.CreateCommand()) { con.Open(); cmd.CommandText = "usp_StoredProcedureName"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@regnum", regnumber); using (SqlDataReader dr = cmd.ExecuteReader()) { //Loop through all the rows, retrieving the columns you need. while (dr.Read()) { lblConf.Text = dr.GetValue(0).ToString(); lblName.Text = dr.GetValue(1).ToString() + "," + dr.GetValue(2); lblCompany.Text = dr.GetValue(3).ToString(); lblStatus.Text = dr.GetValue(4).ToString(); } } } } } catch (Exception ex) { MessageBox.Show("Can not open connection! "); }


Agregue esto a su código para verificar:

sqlCommand cmd = new sqlCommand(); SqlDataReader dr = cmd.ExecuteReader(); if(dr.HasRows) { while(dr.Read()) { //code } }


La propiedad HasRows puede ayudarlo.

Valor de propiedad

Escriba: System.Boolean true si el SqlDataReader contiene una o más filas; de lo contrario falso.


if(dr.HasRows) { // .... } else { MessageBox.Show("Reservation Number Does Not Exist","Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); }

Propiedad SqlDataReader.HasRows