Что произойдет, если я вызову метод `ExecuteReader` для` SqlCommand`, ссылающийся на хранимую процедуру, которая не возвращает наборов строк? - PullRequest
1 голос
/ 24 мая 2011

У меня есть SqlCommand, который может вернуть ноль или более наборов строк. Что произойдет, если, случайно, SqlCommand вернет ровно ноль наборов строк *, и я вызову его метод ExecuteReader? Получу ли я SqlDataReader, который не может быть прочитан, или я получу исключение?

На всякий случай: нулевые наборы строк - это не то же самое, что один набор строк, содержащий ровно ноль строк.

Ответы [ 3 ]

3 голосов
/ 24 мая 2011

Ваш reader.FieldCount будет нулевым без набора строк.Если вы используете набор данных вместо считывателя, вы получите нулевой набор данных без набора строк.

1 голос
/ 24 мая 2011

Вы все равно должны получить объект SqlDataReader. при попытке:

using (SqlCommand command = new SqlCommand( /* params */))
using (SqlDataReader reader = command.ExecuteReader())
{
    if (reader.HasRows)    // check to see if we have any rows
    {
        while (reader.Read())
        {
            // process
        }
    }
}

... вы просто «провалитесь», поскольку Read() вернет false.

1 голос
/ 24 мая 2011

SqlDataReader.Read(), а также HasRows вернет false:

var reader = command.ExecuteReader();
if (reader.HasRows) // false
{
    while (reader.Read()) // false
    {
        // will never reach
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...