我以前发过这个,但没有得到符合我要求的合适答案。我正在寻找一种技术来在对 SQL Server 表进行更改时通知 C++ 应用程序。我们的中间层是 C++,我们不打算迁移到 .NET 基础设施,这意味着我们不能使用 SQLDependency 或 SQL Notification Servers。我们暂时还坚持使用 SQL Server 2005,它也消除了 SQL Service Broker 外部激活(在 SQL 2008 中引入)。
为了更广泛地了解我正在努力实现的目标:我们的数据库正在更新新信息;每当收到一条新信息时,我们都希望将其推送到 C++ 应用程序,以便其仪表板为用户反射(reflect)最新数据。
我们知道我们可以通过让 C++ 应用程序轮询数据库来做到这一点,但我认为这是低效的架构,并且希望让 SQL 将信息或通知推送到 C++。
最佳答案
您实际上可以使用 C++ 中的查询通知。 SQLNCLI10 的 OleDB 和 ODBC 客户端以及 SQLNCLI 提供程序都支持查询通知。参见 Working with Query Notifications ,在页面的后半部分,您将找到用于 OleDB 行集的 SSPROP_QP_NOTIFICATION...
内容和用于 ODBC 语句的 SQL_SOPT_SS_QUERYNOTIFICATION...
内容。因此,从 C++ 中间层订阅通知是绝对可行的。难题的第二部分是实际获取通知,无非就是发布 RECEIVE。和等待。换句话说,您可以在 OleDB 或 ODBC 上用纯 C++ 滚动您自己的 SqlDepdency。通知中间层后,更新客户端显示就轻而易举了。
在检测数据变化的所有替代方法中,您找不到比查询通知更好的方法了。
顺便说一句,您应该绝对避免的一件事是通过触发器通知客户(哦,恐怖...)。
关于c++ - 在 SQL Server 表中进行更改时通知 C++ 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2158839/