2012-03-18 9 views
0

私はasp.netページにdbのアップデートを実行しています。アップデートには2〜3秒かかります。これらはすべて、最初にdbからデータを読み込み、いくつかの更新を行うメソッドであります。ページ要求がこれらのアクションの2秒未満のとき、db読み取りコード、dbのレコードの同じ状態を読み取り、asp.netページ要求のすべての更新アクションが同じレコードを更新します。asp.netのロックページメソッドが完了するまで

どうすれば最新のリクエストが最も古いものが実行を終了するまで待つことができますか?

アイデア?

+0

いくつかのコードを表示できますか? –

+0

同じデータにアクセスする異なるページ(またはクライアント)を同期するには、データベースロックを使用する必要があります。どのデータベースを使用していますか? – Strillo

+0

私は、データを読み込んで更新するためにADO.NETデータセットを使用するMS SQL 2008を使用しています。 –

答えて

2

私が正しく理解していれば、プロセスが完了するまで、特定のメソッドセットへのアクセスをブロックする必要があります。

簡単です...静的メソッドを作成し、lock()を実装します。共有ロック、読み込み/書き込みロックへのアップグレードなどは本当に魅力的ですが、基本的な原則は共有コードの重要なセクションをロックして、他のユーザーがそれらのセクションに入ることができないようにすることです。

http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.71).aspx

ロックキーワードは、指定されたオブジェクトの相互排他ロックを取得するステートメントを実行し、その後ロックを解除することにより、クリティカルセクションとして、文ブロックをマークします。

static object lockObject = new Object(); 
static bool inProgress = false; 

static void MyProcess() 
{ 
    if(inProgress) return; 

    lock(lockObject) 
    { 
    try{ 
     inProgress = true; 
     // critical code here 
    } 
    finally 
    { 
     inProgress = false; 
    } 
    } 
} 
1

適切な分離レベルとデータベースロックを使用すると、クライアント(正確なトランザクション)が正しく処理され、データの完全性が保証されます(チェックisolation levels)。

私はREAD COMMITTEDを使用することをお勧めします。これにより、コミットされていないデータを読み取ることはなく、トランザクションは同じレコードの更新中にキューに入れられます。

関連する問題