监视SQL Server以获取新行

时间:2010-08-10 13:09:11

标签: sql sql-server vb.net

我正在创建一个应用程序,如果在应用程序数据库中的表中添加了新行,则会通知用户。是否最好为此创建一个触发器,或者直接从应用程序每隔几秒检查一次?想法?

5 个答案:

答案 0 :(得分:5)

使用Query Notifications。这是SQL Server功能,允许在其他用户更改数据时将通知主动推送到客户端。它更好地称为SqlDependency。您订阅了一个查询,并在结果集发生更改(添加,删除或修改行)时收到通知。

EG。使用LinqToCache查询并对无效通知做出反应:

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

答案 1 :(得分:0)

触发器是一个更好的主意。

答案 2 :(得分:0)

触发器如何绕过民意调查的需要?

BTW,sql-server有一个通知服务 - 但它可能有点过分

您可以使用触发器将非常短的通知记录写入另一个表,并轮询该表而不是主表

答案 3 :(得分:0)

触发器是在添加新行时捕获的最佳方式。

但是,就通知用户而言,这取决于您需要如何通知用户。您仍然需要监视数据库。因此,您可能最好保持您的应用程序不变。

当然,如果最初的轮询计数很密集,您可以在数据库的其他位置更新Trigger值。

答案 4 :(得分:0)

触发器是在数据库中执行的操作,因此您需要做一些工作才能使触发器将通知发送回正在运行的应用程序。

如果您从应用程序(每隔几秒或每分钟一次或其他)轮询,则可以控制通知发送给用户的频率。例如,这可以防止用户收到数千封电子邮件,因为添加了数千个新行。