在进行SQL Server表的更改时通知C ++应用程序

时间:2010-01-28 23:38:46

标签: c++ sql sql-server-2005

我之前发过这个帖子但是没有找到符合我要求的合适答案。我正在寻找一种技术来在更改SQL Server表时通知C ++应用程序。我们的中间层是C ++,我们不打算转向.NET基础架构,这意味着我们不能使用SQLDependency或SQL Notification Server。我们还暂时停留在SQL Server 2005上,这也消除了SQL Service Broker外部激活(SQL 2008中引入)。

为了更广泛地理解我正在努力实现的目标:我们正在使用新信息更新数据库;每当收到新的信息时,我们都希望将其推送到C ++应用程序,以便其仪表板反映用户的最新数据。

我们知道我们可以通过让C ++应用程序轮询数据库来实现这一点,但我认为这是一种效率低下的架构,并且希望SQL将信息或通知推送到C ++。

3 个答案:

答案 0 :(得分:4)

您实际上可以使用C ++中的查询通知。 SQLNCLI10和SQLNCLI提供程序的OleDB和ODBC客户端都支持查询通知。请参阅Working with Query Notifications,在页面的后半部分,您将找到OleDB行集的SSPROP_QP_NOTIFICATION...内容和ODBC语句的SQL_SOPT_SS_QUERYNOTIFICATION...内容。因此,从C ++中间层订阅通知是绝对可行的。第二个难题是实际获取通知,这只是发布RECEIVE并等待。换句话说,您可以通过OleDB或ODBC在纯C ++中滚动自己的SqlDepdency。一旦您通知了中间层,更新客户端显示器就是一块蛋糕(好吧,等等)。

在检测数据更改的所有备选方案之间,您将找不到比查询通知更好的方法。

顺便说一句,你绝对应该避免的一件事是通知客户免受触发(哦,恐怖......)。

答案 1 :(得分:1)

我建议编写一个使用Net Pipes通知你app的SQL CLR触发器。

HTH

答案 2 :(得分:-1)

还有另一个建议,它可能更简单,你可能会认为这个建议是垃圾,因为这种冗长的方式,为什么不发送一个关于表的触发通知的电子邮件,如插入/删除/更新对于主题为“数据更改通知”的私人电子邮件地址,您的C ++应用程序可以定期通过POP3进行轮询以检查来自私人电子邮件地址的电子邮件... Mercury pop3框可以在服务器上使用(它是xampp应用程序的一部分)只是一个想法......

希望这有帮助, 最好的祝福, 汤姆。