J'essaie de comprendre comment vérifier si mon SqlDataReader
est nul ou n'a pas de lignes (ce qui signifie que la réservation n'existe pas), puis afficher une boîte de message. Pour une raison quelconque, lorsque je débogue une fois qu'il frappe le code While dr.Read())
, il disparaît s'il n'a pas de résultat de retour.
J'ai essayé de mettre ce code à différents endroits, mais aucun ne semble déclencher la boîte de message si aucun enregistrement n'est retourné
if (dr.GetValue(0) == DBNull.Value || !dr.HasRows)
{
MessageBox.Show("Reservation Number Does Not Exist","Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
(read records)
}
Mon code ...
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! ");
}
if(dr.HasRows)
{
// ....
}
else
{
MessageBox.Show("Reservation Number Does Not Exist","Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
Ajoutez ceci à votre code pour vérifier:
sqlCommand cmd = new sqlCommand();
SqlDataReader dr = cmd.ExecuteReader();
if(dr.HasRows)
{
while(dr.Read())
{
//code
}
}
La propriété HasRows
peut vous aider.
Valeur de la propriété
Type: System.Boolean true si le SqlDataReader contient une ou plusieurs lignes; sinon faux.
Pour une raison quelconque, lorsque je débogue une fois qu'il atteint le code
while dr.Read()
, il disparaît s'il n'a pas de résultat de retour
Je pense que ce que vous voyez ici est que SQLDataReader.Read()
renvoie false
s'il n'y a pas de suivant, ou dans ce cas un premier enregistrement à lire.
Comme d'autres l'ont répondu, utilisez la propriété HasRows
pour déterminer si vous avez des lignes dans le jeu de résultats. Selon ce que vous devez accomplir, vous souhaiterez peut-être tirer parti du fait que Read()
renvoie en effet false
la première fois qu'il est appelé pour un jeu de résultats vide.