0

多層.NET4WPF、WCF、SQL 2008アプリケーション内のさまざまな「システムレベルメッセージ」を監視およびログに記録する割り当てに取り組んでいます。メッセージとは、アプリケーションで発生したイベントの詳細を意味します。ユーザーがログインおよびログアウトするか、データが保存されます。ロギングとは、クライアントが最新のメッセージをポーリングして表示できる軽量のSQLテーブルにメッセージを挿入することを意味します。

これらのメッセージのソースは、Windowsサービス、IISのWCFホスト、さらにはデータベースのストアドプロシージャなど、アプリケーションのいくつかの異なるコンポーネントから発生する可能性があります。最終的に、これらのコンポーネントはそれぞれ独自の方法でSQLテーブルを変更します。したがって、これらの各コンポーネントを個別に攻撃するのではなく、SQLの特定のテーブルが変更(更新、挿入)されたときにメッセージを「トリガー」する必要があると言うことで、物事を単純化できるかもしれないと考えています。

最初に頭に浮かぶのは、変更を監視し、軽量メッセージテーブルにレコードを挿入する各テーブルのトリガーです。私は常に(99%の確率で)データベーストリガーは悪いニュースであるという考え方を持っていました(データベーストリガーは悪ですか?)。そして、私は個人的にSQLトリガーよりもC#を開発してデバッグしたいと思っています。

そのため、代替案を追求する中で、SqlDependencyクラスを使用して変更を検出する方法について説明している「SqlDependencyを使用したデータベースの変更の監視」に出くわしました。概念実証はうまくいくようです。ただし、いくつかのコードサンプルを確認すると、変更が検出されるたびに、新しいSqlConnection、SqlCommand、およびSqlDependencyオブジェクトを再初期化する必要があり、監視する必要がある3つまたは4つのクエリが必要になる可能性があります。

C#でSQLテーブルへの変更を検出するためのより良いオプションはありますか?

また、トリガーバイアスはさておき、これは、データを別のテーブルに再挿入するためだけに、あるセットのテーブルの変更を単純に監視するための回りくどい方法のようです。C#で実装したいロジックが他にもいくつかありますが、これを実行するためのトリガーを作成して実行する必要がありますか?

考え?

4

1 に答える 1

0

一般的にトリガーに対するあなたのバイアスは根拠がないと思います。人々は、カーソルを見下ろすのと同じ理由でトリガーを見下ろします。多くの場合、トリガーは誤用され、悪用されます。しかし、多くのもののように、彼らは確かに彼らの場所を持っており、正しく使用された場合、正しい答えです。

調べる必要のある他のネイティブテクノロジーがいくつかあります。

変更の追跡
http://msdn.microsoft.com/en-us/library/cc280462(SQL.100).aspx

データキャプチャの変更
http://msdn.microsoft.com/en-us/library/bb522489(SQL.100).aspx

SQLServer監査
http://msdn.microsoft.com/en-us/library/cc280386(SQL.100).aspx

あなたのエディションはわかりませんが(これらのいくつかはエンタープライズ機能です)。いくつかのサードパーティソリューションも存在します(私は何も使用していないので、検索/調査はあなたに任せます)。

于 2012-04-25T17:52:01.390 に答える