2012-03-18 88 views
0

我有一個執行一些更新到數據庫的asp.net頁面。更新需要2-3秒,所有這些都需要先從db中讀取數據並做一些更新。當這些操作的頁面請求小於2秒時,db讀取代碼,讀取db中記錄的相同狀態,並且asp.net頁面請求的所有更新操作都會更新相同的記錄。asp.net鎖定頁面方法,直到動作完成

我怎樣才能防止這些,最新的請求等待直到最老的完成他們的執行?

任何想法?

+0

你能告訴我們一些代碼嗎? – 2012-03-18 12:08:52

+0

要同步訪問相同數據的不同頁面(或任何客戶端),您需要使用數據庫鎖定。你使用的是哪個數據庫? – Strillo 2012-03-18 12:09:56

+0

我正在使用MS SQL 2008,使用ADO.NET數據集來讀取數據和更新。 – 2012-03-18 12:12:26

回答

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,它可以確保您永遠不會讀取未提交的數據,並且在對同一條記錄進行更新期間,事務處於排隊狀態。