none
vb.net 資料庫交易 RRS feed

  • 問題

  • 我在資料庫中使用交易語法

    但是我發現如果他 UPDATE 情況下

    失敗也會 commit 例如我原本要讓他更新編號 101 結果資料表內沒有101但是他還是會update成功

    只是筆數=0

    請問我該如何解決這問題呢?

    另外我使用

    Dim 成功筆數 As Integer = 指令.ExecuteNonQuery

    可以用在交易中嗎 例如以下範例

    當我要update 或者 insrt或DEL 資料時都用

    Dim 成功筆數 As Integer = 指令.ExecuteNonQuery

    去判斷 舉例我要更新或刪除或新增 4筆 資料時 則

    Dim 成功筆數 As Integer = 指令.ExecuteNonQuery

    if 成功筆數 =4 then

    Transaction.Commit()

    else

    Transaction.Rollback()

    end if

    請問以上這樣可行嗎?? 因為我看網路很多範例都是

    SQL語法後直接 Transaction.Commit()

    則在catch 才做Rollback 動作

    請了解的大大先進們 幫我解惑 拜託了


    0.0
    2011年1月17日 下午 03:41

解答

  • 1) 這種情形應該可以不用解決, 因為沒有記錄被修改

    2) 這樣的寫法OK

    2011年1月18日 上午 01:40
  • If you run the query directly in SQL Management Studio, you will found that you could run the "update" query successfully even the record is not there. And as you said, it return (0 rows affected).

    If you question is "does it normal and correct?", answer is yes.
    If you ask how to avoid this "0 row execution?", then follow 小歐ou said, you could run select to check if the record is there before you run update.

    And as "this" said, your way to write the commit and rollback are correct.


    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    2011年1月18日 上午 04:00

所有回覆

  • 您好

    1. 關於 [失敗也會 commit 例如我原本要讓他更新編號 101 結果資料表內沒有101但是他還是會update成功,只是筆數=0]

    這是正常的,您假如想避免此情況,可以先透過 Select 查找是否有該筆資料,有的話則 Update,沒有的話則做其他處理(例如 insert)

    2. 請參考 SqlTransaction.Commit 方法 : 認可資料庫交易。一般常見作法是交易出問題時進行 Rollback,假如您要判斷交易不等於 4 筆則進行 Rollback 也可以,只是建議可以先 Select 看看是否有四筆資料,有的話再進行交易


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年1月17日 下午 04:08
    版主
  • 在交易進行中

    select 資料 select 的到嗎??

    我的想法是 還沒commit 應該select 不到

    不知我觀念是否錯誤 ><"


    0.0
    2011年1月17日 下午 05:52
  • 1) 這種情形應該可以不用解決, 因為沒有記錄被修改

    2) 這樣的寫法OK

    2011年1月18日 上午 01:40
  • If you run the query directly in SQL Management Studio, you will found that you could run the "update" query successfully even the record is not there. And as you said, it return (0 rows affected).

    If you question is "does it normal and correct?", answer is yes.
    If you ask how to avoid this "0 row execution?", then follow 小歐ou said, you could run select to check if the record is there before you run update.

    And as "this" said, your way to write the commit and rollback are correct.


    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    2011年1月18日 上午 04:00