数据库更新的托盘通知

时间:2010-08-03 13:43:04

标签: sql-server notifications

我想构建一个小应用程序,只要更新或插入到SQL服务器数据库中的某个表中,就会弹出托盘通知(或吐司弹出窗口等)。

这样做的最简单方法是什么,因为我想尽可能避免轮询?

3 个答案:

答案 0 :(得分:7)

Query Notifications。这是SQL Server功能,允许应用程序订阅更改数据时从服务器推送的通知。它通常通过SqlDependency类来利用。

我最近发布了LinqToCache project,它允许您向LINQ查询添加基于SqlDependency的通知和缓存失效:

var query = (from r in ctx.table select r).AsCached(
 "table", new CachedQueryOptions() {
    OnInvalidated = (sender, args) {
      // the query was invalidated, data has changed
      // refresh display or notify user
    }
 });

答案 1 :(得分:2)

扩展存储过程也是我首先想到的,如果我想在SQL Server本身上运行监控应用程序,可能就是我使用的解决方案。但我猜这可能不是这样。

我建议使用MSMQ作为中间层,我自己,因为它现在几乎与每个版本的Windows一起提供,并且或多或少地为这类事物量身定制。所以,通过这些图层,你有:

  1. 您的某个表上的UPDATE和INSERT触发器,它们调用...
  2. ... .NET程序集(使用CLR集成添加),...
  3. ...将描述插入/更新的消息放入服务器上的MSMQ队列,其中......
  4. 托盘应用程序收到
  5. ...,无论它在哪里运行......
  6. ...然后显示。
  7. 这里有从SQL Server访问MSMQ的示例代码:http://www.codeproject.com/KB/database/SqlMSMQ.aspx

答案 2 :(得分:1)

您可以触发extended stored procedure,这会通知您的托盘。

也许这link更好。