无法保持DataReader打开并在新行可用时获取新行

时间:2010-02-04 04:08:46

标签: sql-server ado.net

我希望能够只执行一次查询并保持生成的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 个答案:

答案 0 :(得分:4)

你是对的 - 这不起作用。你改变什么都不会让它发挥作用。 SqlDataReader执行它在锡上所说的内容 - 它读取从单个查询返回的数据。

如果您需要在数据库中的数据发生变化时收到通知,我建议您查看SQL Server Notification Services。如果由于某种原因无法使用它们(例如,如果您运行的是SQL Server 2000或更早版本),那么您将不得不定期轮询数据库以进行更改。