none
dataAdapt.update鎖定問題 RRS feed

  • 問題

  • 請教前輩:

       dataAdapt.update(dataset)時,如果dataset的key欄位以外的原始內容和source不一樣,

       亦即資料庫已被其他user先變更, update會繼續更新或產生error

      

    2013年3月7日 上午 01:45

解答

所有回覆

  • 這和 DataAdapter 沒關係,那是 DBMS 的行為,預設是 Read Committed,也就是只讀得到被認可後的資料。

    但你的問題很奇怪,UPDATE -> UPDATE 基本上是會成功的,所以最好再講清楚一點你的問題。


    學習不是查個 Google 套個書上的範例就算了,而是去熟悉了解每個程式碼背後的意義,否則就算學個幾百年,它也不會是你的。

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2013年3月7日 上午 02:40
    版主
  • 您好,
    您可以看一下 dataAdapt 的UpdateCommand的CommandText, 就可知道它是依所有欄位更新還是依PK更新。

    我是設定ConflictOption

    將它改成 ConflictOption.OverwriteChanges 就是依 PK來UPDATE,

    預設是 CompareAllSearchableValues ,所以如果有人改過的話,應該會發生錯誤哦!

    您可以參考以下的資訊,
    設定SqlCommandBuilder建立的GetUpdateCommand使用PK Update


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2013年3月7日 上午 03:01
    2013年3月7日 上午 03:00
  • 謝謝答覆, 我的問題舉例說明如下

    假設有A,B兩人同時讀取庫存,A,B的dataset庫存量當然都一樣,假設兩人的庫存量都=100,

    A入庫20,庫存=120, update後資料庫的庫存變為120,

    B也入庫30,庫存=130,update後資料庫的庫存變為130

    但事實上庫存應該=150

    如果B的dataAdapt.update没有針對B.dataset的original庫存100與資料庫的120比對,產生exception

    而成功update,那最終庫存變成130造成錯誤.

    請問要如何解決?

    2013年3月7日 上午 04:35
  • 您好,
    您可以參考看看以下的資訊哦!
    Concurrency handling techniques in ADO.NET




    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/



    • 已編輯 亂馬客 2013年3月7日 上午 04:44
    • 已標示為解答 Hoochuan 2013年3月7日 上午 04:47
    2013年3月7日 上午 04:42
  • 感謝 亂馬客

      這就是我想知道的,謝謝!

    2013年3月7日 上午 04:50