2012-04-25 92 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