首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 2.0 數據教程(二十一):開放式並發控制實作與衝突檢測機制

     編輯:關於ASP.NET

返回 ASP.NET 2.0 數據教程目錄

導言

僅允許用戶檢視資料或單一用戶修改資料的 Web 應用不存在多用戶併發衝突。但允許多用戶修改刪除資料的應用,可能發生一用戶更改與另一併發用戶衝突。無併發策略時,兩用戶同時編輯同一記錄,最後提交者覆蓋先提交者更改。

例:Jisun 與 Sam 同時存取允許透過 GridView 更新刪除產品資料的頁面。兩人同時點擊編輯按鈕。Jisun 將產品名稱改為「Chai Tea」點擊更新,實質送出 UPDATE 陳述式更新該產品所有可修改欄位(雖實際僅改名稱)。此時資料庫含「Chai Tea」記錄。但 Sam 螢幕 GridView 編輯列仍顯示「Chai」。片刻後 Sam 將類別改為「Condiments」點擊更新,送出 UPDATE 將產品名稱改回「Chai」、CategoryID 為 Beverages 對應 ID 等。Jisun 的名稱更改被覆蓋。圖 1 展示事件序列。

圖 1:兩用戶同時更新同一記錄可能導致更改覆蓋

圖 1:當兩個用戶同時更新一條記錄,則存在一個用戶的更改覆蓋另一個的更改的可能性

類似地,一用戶可能更新他用戶已刪除的記錄,或一用戶載入頁面至點擊刪除間,他用戶修改了記錄內容。

三種併發控制策略

  1. 不處理 — 併發用戶修改同一記錄,最後提交結果生效(預設行為)
  2. 開放式並發 — 假定衝突僅偶發;發生時告知用戶更改無法儲存,因他人已修改同一記錄
  3. 保守式並發 — 假定衝突頻繁;用戶開始編輯時鎖定記錄,防止他人編輯刪除,直至完成提交
注意: 本節不討論保守式並發範例。保守式並發少用,因鎖定未完全釋放會妨礙他人更新。例:用戶為編輯鎖定記錄但離開未解鎖,他人無法更新直到原用戶返回完成。故保守式並發通常設時限,逾時取消鎖定。訂票網站鎖定特定座位即保守式並發例子。

第一步:開放式並發控制實現原理

開放式並發確保記錄更新刪除時與開始編輯時狀態一致。例:可編輯 GridView 點擊編輯按鈕時,記錄原始值從資料庫讀取顯示於 TextBox 等控制項,原始值保存在 GridView。用戶完成修改點擊更新,原始值與新值送至 BLL、DAL。DAL 發出 SQL,**僅更新資料庫中值仍與原始值一致的記錄**。圖 2 描述事件順序。

圖 2:更新或刪除成功需原始值與資料庫一致

圖 2:為了更新或刪除能夠成功,原始值必須與資料庫中相應的值一致

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved