3

VB.netアプリケーションにはSQLインターフェイスがあり、usersこのアプリケーションのユーザー用にSQLデータベースにテーブルがあります。ユーザーがボタンをクリックすると、変更がSQLに保存され、データが更新されると、全員が同じデータを表示します。ただし、一部のユーザーがそのボタンをクリックするとすぐに、すべてのユーザーのデータが更新されるようにします。

私が持っているアイデア

  1. 毎秒データを更新しますが、これは良くありません
  2. もっと明確にする必要がある vb.net への SQL トリガー!

最も効果的な方法は何ですか?

タイマーなしで回避したい!

ありがとう

4

3 に答える 3

2

SQL Server 通知サービス

SQL は、要件に関連するメカニズムを提供する通知のサブスクリプションを提供します。

http://msdn.microsoft.com/en-us/library/ms172483(v=sql.90).aspx

:SQL Server 2008 R2を使用しているという情報を後で提供したため、削除されました

との古いトリックSystem.IO.FileSystemWatcher

もう 1 つの方法は、単純なファイル タイムスタンプの変更を行う SQL トリガーをテーブルに作成することです。ファイル自体のサイズは 0 バイトなので、何も書き込まないため、操作が高速になります。

次に、すべてのクライアントがこのファイルの変更を監視し、変更が発生すると、ウォッチャーが変更イベントをトリガーし、クライアントは単にデータをリロードします。

CREATE TRIGGER DataChanged
ON YourTable
FOR INSERT, UPDATE, DELETE
AS
    EXEC master..xsp_UpdateSignalFile 'YourTable.DataChanged'

この CLR ストアド プロシージャの考え方は、スケーラビリティを維持するためにできるだけ高速にすることです。負荷の高いデータサーバーの場合、外部プロセスを使用してファイルを更新することで最適化することもできます...

CLR ストアド プロシージャのコードは、実際には Web フォームに関連するこの MSDN 記事にありますが、この CLR プロシージャ以外は必要ありません。そして、システム全体がどのように機能するかの説明かもしれません。

クライアントは、System.IO.FileSystemWatcherネットワークの場所 (プロシージャがファイルを更新する場所) でファイルの変更を監視し、変更が発生したときにデータを更新するために を使用します。

ポーリングやデータ サーバーへの不要なリクエストを使用しない、シンプルで洗練されたトリックです。もちろん、それぞれが異なるファイルを変更するいくつかのテーブルにトリガーを設定できます。クライアントに表示しているフォームに応じて、フォームの存続期間中、その特定のファイルを監視します。ユーザーがコンテキストを別のデータに変更すると、クライアント アプリはファイル ウォッチャーを解放します (そして、別のファイルに必要な新しいものを作成します)。

于 2012-11-27T12:41:47.957 に答える
0

I'm guessing this is a Windows Form App, rather than an aspx web application? I would suggest reloading the form on some sort of user raised event.

于 2012-11-27T12:30:18.890 に答える
0

単純、

そんなことはできません。ブラウザーはデータを 1 回だけ取得し、Cookie などのいくつかのものを除いて、ブラウザーは何も記憶しません。

唯一のオプションは、5 秒または 10 秒ごとにページを更新することです。これは、javascript を使用してのみ行うことができます。幸いなことに、Visual Studio にはある種の JavaScript が用意されています。これにより、ブラウザがリフレッシュされなくなります。5秒ごとにそのklikが聞こえない人。

更新するコントロールの周りに updatepanel を追加します。次に、postbacktrigger を追加して、5000 ミリ秒に設定します。

「ページの読み込み」に追加 --> コントロールを更新します。

より良い方法は、データを送信するだけの webmethod を追加することですが、上記は問題なく動作し、実装も簡単です。

幸運を。

于 2012-11-27T12:36:12.560 に答える