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 alwhile 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);
}