代码之家  ›  专栏  ›  技术社区  ›  n00b

当SQL Server表发生更改时通知C++应用程序

  •  4
  • n00b  · 技术社区  · 15 年前

    我以前发布过,但还没有得到符合我要求的合适答案。我正在寻找一种技术来通知一个C++应用程序,当对SQL Server表进行更改时。我们的中间层是C++,我们不想移动到.NET基础结构上,这意味着我们不能使用SQLRe相依或SQL通知服务器。我们还暂时使用了SQL Server 2005,它还消除了SQL Service Broker外部激活(在SQL 2008中引入)。

    为了更全面地理解我所要达到的目的:我们的数据库正在更新新的信息;每当收到一条新的信息时,我们想把它推到C++应用程序上,以便它的仪表板反映用户的最新数据。

    我们知道我们可以通过让C++应用程序轮询数据库来实现这一点,但是我认为这是一个低效的体系结构,希望SQL将信息或通知给C++。

    3 回复  |  直到 7 年前
        1
  •  4
  •   Remus Rusanu    15 年前

    您可以使用C++中的查询通知。用于sqlncli10和sqlncli提供程序的OLEDB和ODBC客户端都支持查询通知。见 Working with Query Notifications ,在页面的下半部分,您将找到 SSPROP_QP_NOTIFICATION... 用于OLEDB行集和 SQL_SOPT_SS_QUERYNOTIFICATION... 用于ODBC语句的资料。因此,从C++中间层订阅通知是完全可行的。第二个难题是实际获得通知,除了发布 RECEIVE 还有等待。换句话说,您可以在OLDEB或ODBC上在纯C++中滚动自己的SQL语句。一旦通知了中间层,更新客户机显示就很容易了。

    在检测数据更改的所有替代方法之间,您将无法找到比查询通知更好的方法。

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

        2
  •  1
  •   unclepaul84    15 年前

    我建议编写一个使用NET管道通知应用程序的SQLCLR触发器。

    高温高压

        3
  •  -1
  •   t0mm13b    15 年前

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

    希望这有帮助, 最好的问候, 汤姆。