-1

と で開発されたアプリケーションがC#ありSql Server 2008ます。

ここでユーザーはデータベースからリストを開くことができ、その時点で同じデータベース テーブルが更新され、特定のユーザーが現在のリストを開いたことが示されます。別のユーザーが同じリストを開こうとすると、ユーザー A が既にリストを開いていることが通知され、閉じるかユーザーに通知する 2 つのオプションがあります。

ユーザー通知プロセスでは、リストを開いたすべてのユーザーのデータベースを定期的にチェックして、他のユーザーが同じリストを開こうとしていることを示す通知を送信しているかどうかを確認する必要があります。

データベースを定期的にチェックするのではなく、誰かが通知の送信オプションを押したらすぐに識別するよりスマートな方法はありますか? データベースからシステムへの通知を受け取るようなものですか? 私はSqlNotificationRequestについて見つけました。SQL 2008 に同様の新機能はありますか?

または他の代替手段を達成することは可能ですか?

4

2 に答える 2

2

同種の Microsoft インフラストラクチャを使用しているため、SQL Server Service Brokerを確認することをお勧めします。

サービス ブローカーはキューを使用して、その通知に関心のある人にメッセージを送信します。アプリケーションはこれらのメッセージをサブスクライブし、変更の種類に対応して反応できます。

SQL Server Service Broker は、SQL Server データベース エンジンでのメッセージングおよびキュー アプリケーションのネイティブ サポートを提供します。これにより、開発者は、データベース エンジン コンポーネントを使用して異種データベース間で通信する高度なアプリケーションを簡単に作成できます。開発者は Service Broker を使用して、信頼性の高い分散型アプリケーションを簡単に構築できます。

詳細はこちら: SQL Server Service Broker の紹介

Microsoft SQL Server 2005 の機能である Service Broker を使用すると、Transact-SQL データ操作言語 (DML) の拡張機能を使用して、内部または外部のプロセスが保証された非同期メッセージを送受信できます。メッセージは、送信側と同じデータベース内のキュー、同じ SQL Server インスタンス内の別のデータベース、または同じサーバーまたはリモート サーバー上の別の SQL Server インスタンスに送信できます。

于 2012-09-17T08:44:40.793 に答える
0

私はそれがあなたのアプローチに完全に依存していると思います。

クエリするだけでそれを行う場合。データベースには、どのテーブルがどのユーザーによって現在表示されているかを知る方法がありません。ただし、アプリケーションはこれを行います。これは、どのテーブルがどのユーザーによって現在表示されているか、どのように表示および編集できるかなどを指定するマネージャーである必要があります。

DataReaderオブジェクト(SqlDataReader)で一般的なサービスのようなものを使用する場合、それらのSqlDataReaderとその最後のクエリなどを管理するクラスのすべてのインスタンスをカウントできます。

データリーダーは、データベースの結果セットにオープンに接続されています。多分それはリードですか?

この全体の問題は、何人のユーザーがWebサイトを閲覧しているのかという問題と同じです。ロードされたら、彼らがまだそれを表示しているかどうかをどうやって知るのですか?

于 2012-09-17T08:26:48.580 に答える