標籤:分布式 事務
摘要:在軟體開發和資料庫操作中,經常出現需要共同進退的情況,要麼一起成功,要麼一起失敗。
假設案例:A向B轉賬3000元rmb。update Account set Amount=Amount-3000 where name=‘a‘update account set Amount=Amount+3000 where name=‘b‘
情境:假設在第1行代碼執行成功,第2行代碼還未執行的情況下。未繼續執行。
結果:A的錢沒了!B沒收到錢!
此時推薦使用分散式交易來解決這類問題。
解決方案應該實現原子性:要麼全部成功、要麼全部失敗(復原)
事務:事務(Transaction)的特徵是“原子性”,也就是“要麼全部成功,要麼全部失敗”。事務實現還是有很多方法,最常見的就是使用連結相關SqlTransactionSqlTransaction優點:1 不需要做用戶端、伺服器端的配置;2 無須啟用事務協調服務(MSDTC)缺點:無法實現分散式交易、嵌套事務、編寫麻煩。
TransactionScope用來實現分散式交易(可以跨資料庫、跨機器操作)的步驟1 Windows服務中開啟MSDTC(Distributed Transaction Coordinator),並且啟動類型改為“自動”。
注意:需要在ADO.NET端和資料庫端上需要都進行相同操作。2 項目添加對System.Transactions的引用代碼範例:
//包起來就會兩者一起。一起成功,或者一起失敗using(TransactionScope ts=new TransactionScope()){ "update Account set Amount=Amount-3000 where name='a'";//從A賬戶扣錢的操作 "update account set Amount=Amount+3000 where name='b'"//向B賬戶增加錢的操作 ts.Complete();//忘記這句話,兩個都插入失敗}
分散式交易 原理及使用範例一則