2012-09-26 34 views
19

Estoy tratando de 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 depuro una vez que llega al código While dr.Read()), sale si no tiene un resultado de retorno.Cómo comprobar si SQLDataReader no tiene filas

He intentado poner este código en unos pocos lugares diferentes, pero ninguno parece disparar el cuadro de mensaje si no hay registros se devuelven

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! "); 
} 
+0

Mantén el ciclo como está, pero ajusta una declaración If para ver si (dr.HasRows) {} – MethodMan

Respuesta

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

SqlDataReader.HasRows Property

+0

Gracias, funcionó, estaba usando la propiedad de hasrows, simplemente lo uso mal, supongo. – Tim

2

The HasRows property puede ayudarle.

Propiedad Valor

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

3

Agregue esto a su código para comprobar:

sqlCommand cmd = new sqlCommand(); 
SqlDataReader dr = cmd.ExecuteReader(); 

if(dr.HasRows) 
{ 
    while(dr.Read()) 
    { 
     //code 
    } 
} 
1

Por alguna razón, cuando depurar una vez que golpea el Código while dr.Read() que sale si no tiene un resultado devuelto

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

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

Cuestiones relacionadas