2014-09-04 26 views
0

我我的應用程序的測試是我怎樣才能防止數據併發節省數據庫在.NET

從兩個不同的瀏覽器

我有打開我的應用程序,從我做一些開放同一個頁面中所面臨的一個問題操作。
然後從兩個瀏覽器同時請求更新數據。並且來自兩個瀏覽器的數據都保存在數據庫中是錯誤的。

我已經做了一些防止這個問題的代碼,比如首先檢查值是否存在於數據庫中。但是這種驗證不能防止數據的併發保存。

請幫幫我。我需要解決這個問題。
感謝adavance

+0

是你熟悉的 「rowversion」 的概念? (歷史上和令人困惑地稱爲「時間戳」在SQL Server中) – 2014-09-04 11:09:26

+0

是的,但是要實現「時間戳」我必須在每個我要更新的表中添加一列。有時候我正在從網絡服務中做4-6個表格。我是否應該在我的應用程序中實施「時間戳」? @MarcGravell – 2014-09-04 11:13:46

+1

完全防範數據訪問中的競爭條件的唯一方法是*使用悲觀鎖(這將是一個可怕的想法),或使用樂觀併發;樂觀併發的最簡單和最可靠的形式是:排版。是的,還有其他方法可以做同樣的事情。 – 2014-09-04 11:17:07

回答

1

您可以防止使用樂觀或悲觀鎖定

樂觀鎖

  • 有3種主要的方法,使我們能夠實現樂觀保存併發錯誤數據在.NET中鎖定 : -

    1. Datasets: - 數據集默認實現樂觀鎖定。他們 在更新之前檢查舊值和新值。

    2. Timestamp Data type: - 在表 中創建時間戳數據類型,並在更新時檢查舊時間戳是否等於新時間戳。

    3. Check old and new value: - 獲取的值,而做最後的更新檢查舊值和數據庫當前 值相等做的修改和 。如果它們不相等,則回滾或 否則提交的值

悲觀鎖定

  • 我們可以通過SQL 服務器指定「的IsolationLevel」預存做悲觀鎖程序,ADO.NET級別或使用事務範圍 的對象。

欲瞭解更多信息,請訪問: http://www.codeproject.com/Articles/114262/ways-of-doing-locking-in-NET-Pessimistic-and-opt

+0

感謝您的回答。我正在做的是首先我在數據集中分配值,然後將數據集發送到webservice進行處理。在Webservice中所有數據都是進程然後執行更新,通過過程插入操作。那麼哪一個選項適合我的申請? @Vizard – 2014-09-04 11:19:12

+0

使用'SqlDataAdapter'通過傳遞數據集作爲其參數,即'sqldataadapterobject.Update(yourdataset)',使用'SQLDataAdapter'對象的'Update'方法來調用'Update'函數。如果有一些數據chamge,它會拋出'DBConcurrencyException' ...檢出我上面在'Datasets'部分下面提供的鏈接以獲取更多信息 – Vizard 2014-09-04 11:24:04

+0

好吧,我會檢查它.. !!多謝兄弟..!! – 2014-09-04 11:28:37

相關問題