1

我有一个应该等待数据库更改的 Windows 服务。

它查看的数据库表如下所示:

编号 [指南]

名称[文字]

MatchId [Guid] => 这是一个外键

比赛日期时间 [日期时间]

我希望我的服务能够检测到何时有人“清除”了“MatchId”字段(为其分配了 NULL),

然后对于在其“MatchId”字段中具有“NULL”的所有行 - 执行一些算法,为它们找到匹配项并分配“MatchId”字段。

问题是 - 如果我使用“SqlDependency”类,并等待它在“MatchId”字段上触发 - 我只会在行受到影响时收到通知,但任何现有的“MatchId = NULL”行 - 我不会知道关于。

这意味着如果 Windows 服务加载,并且表中已经有 20 行“MatchId = NULL”,并且在接下来的 5 小时内没有人会“清除”“MatchId”行 - 这意味着我不会知道关于现有的 20 行,不会处理它们。

一种解决方案可能是在我设置“SqlDependency”之前 - 我应该执行快速“选择”以查看是否存在任何现有的“MatchId = NULL”行,如果有的话 - 处理它们,然后才设置依赖关系。

问题是 - 在完成处理这些行和设置 SqlDependency 之间的短暂间隔内 - 可能会发生一个事件,其中有人将行更改为“MatchId = NULL”,然后再一次 - 我不会在Sql依赖。

知道如何解决这个问题吗?

(如果最坏的情况发生,我就不会使用SqlDependency,我只需要每XXX分钟轮询一次数据库......)

4

1 回答 1

1

我明白,我迟到了这个答案,但你没有更新,你选择哪种方法:)

您可以先启动 SQLDependency,然后运行选择查询来检查现有记录。换句话说,您将在 SQLDependency 启动后(最初或更改后)每次轮询空记录

问题的答案中建议了相同的方法如何弄清楚哪个 SQLDependency 触发了更改函数?

首先也是最重要的:必须在执行命令之前设置处理程序。否则,当通知可能丢失并且您的回调从未被调用时,您会有一个窗口

.

于 2012-09-26T16:31:24.703 回答