.net 数据库中的监控表

.net 数据库中的监控表,.net,asp.net,database,.net,Asp.net,Database,我想让一个网站充当数据库中某个表的监视器,或者充当该表的列表输入程序 让我们假设我有员工 我想制作一个网页,用于侦听该表上发生的更改(所有DML操作) 每当插入记录时,我希望此页面通知我“在表employee中插入了1行”,或更新了记录,我希望收到通知“行号xx已更新”,依此类推 那么,这样做的最佳做法是什么 thnx你不能只让网页“监听”,因为网页只能按需执行代码。某些东西必须访问页面才能执行(您可以让页面自行刷新,但必须让它在浏览器中打开,或被程序访问)。您需要创建一个服务或一个计划任务,该

我想让一个网站充当数据库中某个表的监视器,或者充当该表的列表输入程序

让我们假设我有员工

我想制作一个网页,用于侦听该表上发生的更改(所有DML操作)

每当插入记录时,我希望此页面通知我“在表employee中插入了1行”,或更新了记录,我希望收到通知“行号xx已更新”,依此类推

那么,这样做的最佳做法是什么


thnx

你不能只让网页“监听”,因为网页只能按需执行代码。某些东西必须访问页面才能执行(您可以让页面自行刷新,但必须让它在浏览器中打开,或被程序访问)。您需要创建一个服务或一个计划任务,该任务可以ping数据库并检查更改,也可以ping网页以检查数据库

编辑:以下是我想说的。
您有两种类型的通知,推送和拉送。从网页访问信息是一种拉式通知。您必须访问该页面才能获取信息。只要您正在访问该页面,您就可以继续接收更新,但当您停止访问时,当某些内容发生更改时,您将不再收到通知

这与每次发送邮件之类的事情形成了对比。您可以使用一种服务,在更新表(寻呼机、电子邮件等)时向其他系统发送通知。网页本身无法完成此操作

如果你想要一个拉通知,一个网页可以做到这一点没有问题,但是当你停止访问该网页时,你将不会收到关于更新的通知。如果这是您想要的,只需让页面刷新,或者ajax请求ping一些服务器端代码来检查数据库,但是这种方法不适用于您绝对需要知道何时发生的事情

或者,您可以在SQL server中创建一个触发器,该触发器在每次更新表时发送通知。如果你想从一个页面访问信息,这不是一个好办法,但是如果你想得到通知,比如说通过电子邮件,那么你可以触发一次。(当您需要推送通知时,这是一个解决方案)。如果您实现了comet解决方案,您可能会有一个web页面的触发器更新,但可能有更简单的方法

第1部分:db触发器。 这是使该解决方案成为可能/简单/稳健的关键部分。每次employee表进行更新或插入时,都需要创建一个写入另一个表(tblEmployeeChanges)的。因此,如果在特定的一分钟内,他们对employee表进行了5次更改,tblEmployeeChanges将有5条新记录,有点像这样:

EmployeeChangeID  ChangeType  EmployeeID  ChangeTime
1643              Insert      434243      2010-07-23 09:14:04
1644              Update      345345      2010-07-23 09:14:07
1645              Insert      345347      2010-07-23 09:14:21
1646              Update      345438      2010-07-23 09:14:39
1647              Update      435634      2010-07-23 09:14:41
然后,您的监控网页将每隔几秒钟检查一次该表,或者无论您希望的频率如何(当用户点击“刷新”按钮时),您的网页将获得该数据并显示它

这个表可能会变得非常大,但如果有好的索引,它将保持相当的效率。您可以随时轻松地清除“旧数据”。您将在EmployeeChangeID或ChangeTime上拥有聚集索引,因此不应该不断添加,查询也不应该是一个大问题

第2部分:简单web REST服务 创建一个.asmx页面或简单的wcf服务,该服务接受EmployeeChangeID,并为每个EmployeeChangeID大于该记录的tblEmployeeChanges记录发送信息

第3部分:从监控页面重复Ajax调用**。 比如说,每隔2秒钟,您的网页就会发送该网页知道的最后一个EmployeeChangeID。如果有任何新行,回调函数会将它们添加到显示中(供人查看),发出嘟嘟声或其他声音,并将列表中最后一条更改记录的ID写入javascript变量或隐藏输入,以便在下一次ajax调用中使用(2秒后)

例子: 因此,在9:14:38,您的页面请求自Change1645以来的所有更改,但没有返回任何内容。然后在9:14:40(换成1646);您的页面显示了这些数据。然后在9:14:42,你的页面会要求在1646年之后进行每一次更改,比如什么都不要拿回来,等等

注意:触发器是解决方案的关键:
我并不特别喜欢触发器,有时几个月都不用。但在这种情况下,这是必要的。注意:如果您真的需要跟踪系统中的更改,那么最好有一个体系结构,在该体系结构中,跟踪所有值的每个更改,并将每个员工的每个属性保存在键值对表中,其中最新的值被视为“活动”值。这种体系结构有优点也有缺点,可能不适合您。但是,如果体系结构认为跟踪更改是事后考虑,那么跟踪更改将不得不作为事后考虑,使用诸如db触发器之类的工具进行不优雅的处理。

是您可以寻找的。

RSS将更改提供给您的MS Outlook或手机。也就是说,编写一个存储过程,返回新的进程,并将其放在您可以订阅的RSS提要上。我的博客展示了如何在VS 2010中做到这一点,它是

你在使用什么数据库服务器?使用一些聪明的JavaScript,一切都是可能的。如果JavaScript从未执行过,就不会发生。@Kevin,许多网站运行JavaScript,每隔几秒钟从服务器获取信息并通知用户-这是什么,当你开始键入一个答案和其他一些准备就绪的答案时,顶部会出现一条消息。。。同样的想法我怎么能看到触发器外部sql server(我的意思是在web页面中)的通知@Aristos是的,但是您已经访问了该页面。我刚才说的是,如果你不ping页面,它就无法通知你某些内容已更改。我没有显示该表的数据网格,或者用户将刷新页面以查看更改,我希望用户看到一个警报,告诉他在