データベースを継続的にクエリするのに役立つ C# コードを書きたいと思います。
何らかのソースによってデータベースにエントリが作成された場合 (いつエントリが作成されるかは不明)、それは私のコードで処理する必要があります。(単純に、私のコードは常にデータベースのエントリを監視する必要があります)。
データベースを継続的にクエリするのに役立つ C# コードを書きたいと思います。
何らかのソースによってデータベースにエントリが作成された場合 (いつエントリが作成されるかは不明)、それは私のコードで処理する必要があります。(単純に、私のコードは常にデータベースのエントリを監視する必要があります)。
コードにWebServiceを追加します。
テーブルに挿入と更新のトリガーを追加します。
トリガーから呼び出すことができるCLR関数を作成します。
そのCLR関数で、必要なすべてのデータを使用してWebサービスを呼び出します。
Webサービスでは、渡されたパラメーターに基づいて必要なことをすべて実行します。
構成テーブルを追加し、WebサービスのURLを入力します。
URLを引数としてCLR関数に渡します。
Webサービスを非同期的に呼び出す必要があるため、遅延は最小限に抑えられます。
注:
純粋なSQLからWebサービスを呼び出すことも可能だと思うので、CLRは必ずしも必要ではありません。
基本的に 2 つの主なオプションがあります。
まず、おそらく「HasBeenProcessed」と呼ばれるビット フィールドである追加の列をテーブルに追加できます。次に、HasBeenProcessed が 0 の列のチェックをスケジュールできます。それを処理してから、列を更新して 1 にします。
または、SqlDependency クラスを使用して、結果セットの表示が異なる場合にイベントを発生させる方法について説明している、この StackoverFlow の投稿を参照することもできます。
何を達成しようとしていますか?比較的静的であるが、変更される可能性のあるデータ セット (ベンダーのリストなど) をキャッシュ内で最新の状態に維持している場合は、Simon Whitehead の SqlDependency の提案が役に立ちます。リクエストに似たもの (注文など) を処理している場合は、内部または外部のアクティベーションを備えたサービス ブローカーが適しています。いずれにせよ、ポイントは、コードを常にデータベースに送信して、「私に何かありますか?」と言っていないことです。代わりに、何かすることがあるときにデータベースにアプリケーションに通知させ、それに応じて行動させます。
SQL Server 2008 R2 または SQL Server 2012 を使用している場合は、StreamInsightを使用して、データの変更とパターンに対してイベントをセットアップできます。2005 年より前のバージョンを使用している場合は、Notification Services を使用できます (ただし、StreamInsight ははるかに優れており、本質的に Notification Services に取って代わります)。