2013-12-16 66 views
1

我有一種情況,我在.NET中使用事務範圍。TransactionScope是在同一事務中的讀取數據庫更新

其中有多個方法調用,第一個執行數據庫更新,然後最後一個讀取數據庫。

我的問題是數據庫會讀取更新數據庫的第一個方法調用中的更改(請注意,這些方法中存在提交,但在事務範圍完成之前它們並未真正提交)。

例如使用TransactionScope。方法1(將新註釋插入數據庫中)。

方法2(從數據庫中檢索所有評論)。

complete。

}

將方法2的結果包括方法1插入?

讓我感到困惑的是,我已經跑了大量的測試,有時更新在那裏,有時它不是!?!

我知道有隔離級別(在高層次),是否有一個只允許在transactionscope內讀取未提交的數據?

任何和所有幫助非常感謝......

回答

0

是的,這是交易的目的。考慮一下你有兩個表的情況,另一個是外鍵。在你的交易中,你插入一個,然後另一個插入第一個插入的外鍵,它就可以工作。如果數據不可用,交易將毫無意義:一次只能執行一項操作,這將是原子性的,因此會消除交易的需要。

+0

是的,我明白你的意思並同意,我想插入第一個數據應該可用於在同一事務後面的步驟。我想我的困惑是爲什麼在我的一些測試中,第一次插入並不總是出現在事務後面的讀取中...... – user2026086

+0

我不得不懷疑程序中的邏輯錯誤。如果您在事務中成功插入,則在提交或中止前後續讀取數據應始終返回數據。 – Haney

+1

user2026086我認爲這可能是交易損失或總是使用其他連接來處理當前事務中的更改。它非常不重要的用戶Transaction.Connection所有需要連接到數據庫的操作,如執行命令。並確保您始終使用sqlcommand。Transaction = yourTransaction。我推測witout代碼,但我相信,你可以在開始接收插入值並在最後收到它,直到我不會回滾:)並記住dispose = rollback //否提交=回滾//什麼都沒有發生 - mssql auto rollback –

1

你可以做你想要的(MS-SQL)數據庫的任何操作,並

器transaction.commit()

的任何更改將apear,直到你沒有。

即使您在一次事務中插入NEW記錄,您也可以在同一事務中獲取其值。 (ofc如果你不回滾())它。

索裏,我的英語,任何校正是開山鼻祖

+0

感謝您的意見,它有幫助。 – user2026086

相關問題