You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
For queries that do have records, SqlDataReader.HasRows method returns false when the DB returns more than 1 InfoMessageToken, before sending a RowToken, HasRows assumes no records are left, and returns false even though it should have been true.
Using a db that returns two infomessages in the beginning is enough to reproduce the behavior.
string connectionString = "....";
var conn = new SqlConnection(connectionString);
conn.Open();
conn.InfoMessage += (sender, e) => Console.WriteLine(e.Message);
var cmd = conn.CreateCommand();
cmd.CommandText = "PRINT('1');SELECT * FROM t1";
using (var dr = cmd.ExecuteReader())
{
Console.WriteLine($"HasRows: {dr.HasRows}"); // will return false if 2 infoMessages are sent by the DB.
while (dr.Read())
{
Console.WriteLine(dr[0]);
}
}
Expected behavior
HasRows shoud return true.
Additional context
When trying to identify the issue we encounter that this should probably be a while instead of an if statement.
The text was updated successfully, but these errors were encountered:
Describe the bug
For queries that do have records, SqlDataReader.HasRows method returns false when the DB returns more than 1 InfoMessageToken, before sending a RowToken, HasRows assumes no records are left, and returns false even though it should have been true.
Using a db that returns two infomessages in the beginning is enough to reproduce the behavior.
Expected behavior
HasRows shoud return true.
Additional context
When trying to identify the issue we encounter that this should probably be a
while
instead of anif
statement.The text was updated successfully, but these errors were encountered: