2012-02-20 52 views
0

我正在寫一個Web應用程序,允許用戶對數據庫的基本CRUD操作。正在更新的表格少於200條記錄,並且可能有多個用戶使用此應用程序,因此需要某種鎖定機制來避免2個用戶互相覆蓋其他更改。信號量爲數據行

我已經看着信號量,但似乎只限制執行相同代碼的用戶數量。在我的數據層中,我爲每個表都有一個類文件,所以我可以在特定表的類文件中使用它,但是我可以以某種方式將鎖定限制在關鍵字段中?

+0

數據庫不支持鎖定嗎?爲什麼在代碼中? – Umbrella 2012-02-20 03:43:43

+0

我確定它確實如此,除非我忘記了某些東西,不會停止用戶1和2將相同記錄加載到網頁(選擇查詢),每次編輯和提交更改(更新查詢),每個人都認爲他們的更改是最新的。 – zkent 2012-02-21 03:49:02

回答

0

假設您正在使用適當的SQL實現以及ASP .Net,爲什麼不使用事務來實現這一點? Check it out here.

此外,您還可以在optimistic concurrency上閱讀,看看您是否需要這些。基本上,在保存一個值之前,用戶檢查特定字段中的值是否與第一次讀取時的值相同。如果值相同,則假定沒有其他人覆蓋它,並且新值被保存到DB;如果值不相同,則會返回警告消息。

+0

如果有幫助,我正在使用ODBC連接到DB2數據庫。 – zkent 2012-02-20 15:43:21

+0

樂觀的併發性(以前沒有聽說過這個詞)是我傾向於的方法。現在我從數據庫中獲取數據並將其放入DTO中,並將其存儲在會話變量中,以在提交更改之前再次與數據庫進行比較。 – zkent 2012-02-20 15:45:12

+0

如果您使用配置嚮導使用TableAdapter,則可以通過最小的麻煩來實現樂觀併發。 [http://msdn.microsoft.com/en-us/library/bb404102.aspx](搜索「創建支持樂觀併發性的數據訪問層」)。事實上,這是一個內置的財產。但是,它首先帶有使用適配器的缺點,即數據庫模式/ SP中的更改不會自動反映在適配器中。但是,如果您已經有一套存儲過程正在其他地方使用,我認爲這是您最好的選擇:) – Rahul 2012-02-21 09:02:31