2011-06-08 75 views
1

這個問題已經在我最近參加的一次採訪中提出。假設我們有一個數據集。我們知道它(數據集)在斷開模式下工作。現在我們使用dataadapter從數據庫中提取必要的數據到數據集中並填充UI。 假設一個用戶(比如user1)正在UI中進行一些更新,稍後將通過數據集保存到數據庫中,並且其他一些用戶(比如用戶2)已經將數據修改爲數據庫。數據集同步如何發生?

問題是,數據集如何才能知道數據在哪一點被修改?那就是數據集中發生了同步?

換句話說,user1不知道user2修改了數據庫中的某條記錄。但不知怎的,數據集需要更新相同。這怎麼會發生?

感謝

回答

0

一種工作方式在ADO 各地樂觀併發問題是鎖住你的數據集,只要 編輯操作開始檢索的記錄。這種策略被稱爲 悲觀鎖定。長時間鎖通常會導致數據庫性能不佳和爭用問題,但在 情況下,應用程序不能容忍 在更新它們時更改了記錄,因此可能需要保留悲觀的 鎖定。

使用ADO,使用悲觀鎖定方案相對容易。在ADO.NET中,設置起來有點困難, 但您仍然可以在您的 應用程序中使用悲觀鎖定。然而,僅僅因爲你可以做點什麼 並不意味着你應該一直這麼做 - 我要說的關於 的解釋應該只在絕對必要的時候使用。

的悲觀鎖的基本步驟如下:

1) Create a transaction with an IsolationLevel of RepeatableRead. 

    2) Set the DataAdapter’s SelectCommand property to use the transaction you created. 

    3) Make the changes to the data. 

    4) Set DataAdapter’s Insert, Update, and Delete command properties to use the transaction you created. 

    5) Call the DataAdapter’s Update method. 

    6) Commit the transaction.