-3

我的网站(asp.net C#)中有一个管理部分,用户应该在其中收到有关 Db 上发生的各种操作(如插入更新等)的通知。

我想在特定用户执行添加新数据之类的操作时收到通知。

如何在 SQL Server 2008 中实现这一点。

4

1 回答 1

2

在 SQL 中,您可以拥有在更改时运行的触发器,但在此之外,您正在查看轮询(使用服务或网站本身缓存最后一条记录的索引并查看是否已插入另一个 id)。

一些如何存储表的“最后插入的 id”然后检查(假设一个 INT 键):

SELECT *
FROM   table
WHERE  id > @LastObservedIndex;

这将返回您上次检查时的任何新条目。然后,当然,如果找到新条目,您将需要更新缓存的 id,以便下一次调用检查更多新条目。

不过,我确实建议您将此作为服务或计划任务;也就是说,您不希望每个管理员在每次访问页面时都进行查询检查新条目。然后,您可以将事件存储在消息队列中,并在用户访问页面时将新通知转储(或使用 AJAX 进行轮询)。

或者,如果您正在处理所有 CRUD 操作(您的站点正在进行任何和所有更新,并且不与其他一些外部进程一起工作),您可以将日志记录/跟踪代码放在您的存储库中。例如:

public class MessageRepository : IMessageRepository<Message>
{
  //
  // ...
  //

  void Add(Message message)
  {
    //
    // add to database code
    //

    // some logging utility that's tracking transactions against specific
    // database elements and reporting them back to some notification log
    // that can then be output to the admin
    this.LogTransaction<Message>(message, TransactionType.Create); 
  }
}

但是,这当然也有其自身的开销。

于 2012-12-19T14:31:34.150 回答