2012-04-25 101 views
0

我正在处理一项任务,以在我们的多层.NET 4 WPF,WCF,SQL 2008应用程序中监视和记录各种“系统级消息”。关于在我们的应用程序中发生的事件,例如用户登录和注销或数据被保存。通过日志记录,我的意思是我们将把消息插入轻量级SQL表中,客户端可以从中查询和显示最新消息。监视SQL数据库表更改的设计注意事项

这些消息的来源可能来自我们的应用程序中的几个不同的组件,例如Windows服务,IIS中的WCF主机,甚至是数据库中的存储过程,最终这些组件会以各自的方式修改SQL表。独立攻击每个组件我想我可以通过说当SQL中的某些表被修改(更新,插入)时需要“触发”消息来简化这些事情。

首先想到的是每个表上的触发器,这些表监视更改并将记录插入轻量级消息表中。我一直(99%的时间)一直认为数据库触发器是坏消息(Are database triggers evil?)。我个人更愿意开发和调试C#而不是SQL触发器。

因此,在追求替代品时,我遇到过使用SqlDependency类来检测更改的Using SqlDependency to Monitor Database Changes。一个概念的快速证明似乎有效;但是,在查看几个代码示例之后,它看起来像检测到每个更改,新的SqlConnection,SqlCommand和SqlDependency对象将不得不重新初始化,我可能需要3或4个需要监视的查询。

有没有更好的选择来检测C#中的SQL表的变化?另外,抛开触发偏见,这看起来像是一种简单的方式来简单地监视一组表中的更改,以便将数据重新插入另一个表中。还有其他一些逻辑需要发生,我宁愿在C#中实现,但是我应该写触发器来做到这一点并完成它?

想法?

回答

0

我认为你对一般触发器的偏见是毫无根据的。人们以低估游标的原因看待触发器:在很多情况下,它们被滥用和滥用。但是像很多东西他们肯定有自己的位置,如果使用得当,的正确答案。

有你应该考虑一些其他本地技术:

更改跟踪
http://msdn.microsoft.com/en-us/library/cc280462(SQL.100).aspx

变化数据捕捉
http://msdn.microsoft.com/en-us/library/bb522489(SQL.100).aspx

SQL Server审核
http://msdn.microsoft.com/en-us/library/cc280386(SQL.100).aspx

祢呃我不知道你的版本(其中一些是企业功能)。一些第三方解决方案也存在(我没有用过,所以我会留给你去搜索/研究)。

+0

感谢您的快速响应!也许你是对的。当然,在这种情况下(基于我的研究),我认为触发器会非常简单。 – 2012-04-25 17:58:27