基础数据库更改时,通知应用程序(C ++或Java)的最佳方法是什么?

时间:2009-12-30 20:43:53

标签: java c++ sql-server

我正在编写一个C ++控制台应用程序,需要响应数据库表的特定字段中的更改。虽然我可以继续发送查询以定期检查字段,但我想避免这种情况,因为此应用程序的多个实例可能正在运行。我听说过SQL Server 2005的查询通知功能,但似乎该功能不适合我的设置(SQL Server 2000)。在这种情况下,实现此功能的最佳方法是什么?

4 个答案:

答案 0 :(得分:3)

您只能定期轮询更改。绝对没有办法从SQL Server 2000获取通知。所有相反的声明都是管道梦想。

通过OLE自动化(sp_oa方法),通过扩展程序,通过xp_cmdshell或任何类似的方式执行任何类型的外部通知的触发器都不起作用。首先是性能问题:您希望数据库做的最后一件事是阻止等待外部进程响应的触发器。其次,在事务环境中通常会忽略这一正确性的细节:如果封闭的事务被回滚,则触发期间发送的任何通知都必须是“未发送”。实现此目的的唯一方法是使用通知机制(例如MSMQ)注册分布式事务,这意味着吞吐量从每秒数百/千位下降到单位数。

不要去那里。升级到SQL 2005并使用QN,这是唯一的主动更改通知机制。或者定期轮询最后的更改。

答案 1 :(得分:1)

我将如何做到这一点。

你有一个控制台应用程序可以检查表的特定列的值何时在该列中的任何位置发生变化(更新,删除,插入等)。

步骤1 - 不要将控制台应用程序指向数据库,创建MSMQ并使其看起来

步骤2 - 创建第二个控制台应用程序,其唯一的工作是将值写入上述MSMQ

步骤3 - 在相关表上创建一个触发器,以执行步骤2中的控制台应用程序。

答案 2 :(得分:0)

我认为你应该使用触发器。

当表字段被更改时触发器被触发并使用任何IPC机制通知其他应用程序或在注册表或临时文件中写入必要的信息。

答案 3 :(得分:0)

我认为Notification Services本身可以在SQL Server 2000上运行。

看看这些文章:

希望这有帮助。