Не удается сохранить DataReader открытым и получать новые строки по мере их появления - PullRequest
1 голос
/ 04 февраля 2010

Я хотел бы иметь возможность выполнить запрос только один раз и постоянно держать результирующий DataReader открытым для получения новых строк по мере их добавления в таблицу базы данных. Примерно так:

SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from table";
using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)){
    while (true){
        while (!reader.HasRows)
            Thread.Sleep(1000);
        if (reader.Read())
            LoadCurrentRow(reader);
    }
}

Это не работает так, как мне бы хотелось. Я получаю только те строки, которые доступны во время выполнения запроса. Я не получаю новые строки, которые добавляю, пока выполняется этот код. Шаблон BeginExecuteReader / EndExecuteReader кажется более подходящим, но дает тот же результат. Разве что я чего-то не понял ...

Может ли кто-нибудь помочь мне выполнить эту работу или предложить альтернативу, которая не предполагает периодического опроса новых строк, повторяя запрос снова и снова?

1 Ответ

4 голосов
/ 04 февраля 2010

Ты прав - это не работает. Ничто из того, что вы измените, не заставит его работать. SqlDataReader делает то, что говорит на жестяной коробке - он читает данные, возвращенные из одного запроса.

Если вам необходимо получать уведомления при изменении данных в базе данных, я предлагаю изучить Службы уведомлений SQL Server . Если вы не можете использовать их по какой-либо причине (например, если вы используете SQL Server 2000 или более раннюю версию), вам придется периодически опрашивать базу данных на предмет изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...