【发布时间】:2010-08-10 13:09:11
【问题描述】:
我正在创建一个应用程序,如果新行已添加到应用程序数据库中的表中,它会通知用户。最好为此创建一个触发器,还是直接从应用程序中每隔几秒钟检查一次?想法?
【问题讨论】:
标签: sql sql-server vb.net
我正在创建一个应用程序,如果新行已添加到应用程序数据库中的表中,它会通知用户。最好为此创建一个触发器,还是直接从应用程序中每隔几秒钟检查一次?想法?
【问题讨论】:
标签: sql sql-server vb.net
使用Query Notifications。这是 SQL Server 功能,允许在其他用户更改数据时主动向客户端推送通知。它更好地称为 SqlDependency。您订阅查询,并在结果集发生更改(添加、删除或修改行)时收到通知。
例如。使用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);
【讨论】:
触发器是一个更好的主意。
【讨论】:
触发器将如何绕过轮询的需要?
顺便说一句,sql-server 有一个通知服务 - 但它可能有点矫枉过正
您可以使用触发器将非常短的通知记录写入另一个表,并轮询该表而不是主表
【讨论】:
触发器是在添加新行时捕获的最佳方法。
但是,在通知用户方面,这取决于您需要如何通知用户。您仍然需要监视数据库。因此,您最好保持您的应用程序不变。
如果最初的轮询计数很密集,您当然可以让触发器更新数据库中其他地方的值。
【讨论】:
触发器是在数据库中执行的东西,因此您需要做一些工作才能让触发器将通知发送回正在运行的应用程序。
如果您改为从应用程序进行轮询(每隔几秒或每分钟一次或其他方式),您可以控制向用户发送通知的频率。例如,这可以防止由于添加了数千个新行而导致用户收到数千封电子邮件的情况。
【讨论】: