ADO.NET 系列 quiz 2 關於分散式交易

來源:互聯網
上載者:User
ado|分布式 問題:
關於分散式交易的例子:

資料庫A 和資料庫B 上各有一個bank 表 ( 實際情況下A 和 B 分別在不同的機器上,不同類型的資料庫(支援dtc))
表結構如下
BankAccount, Amount

A 資料庫中的記錄:
A 1000

B 資料庫中的資料
B 1000

為了測試方便,沒有用 COM+,而是直接在 web service 中測試。
代碼如下:

<WebMethod(TransactionOption:=EnterpriseServices.TransactionOption.RequiresNew)> _
Public Function DTSTest() As String
Try
ContextUtil.EnableCommit()

DrawMoneyFromA(100)
DepostMoneyToB(100)
ContextUtil.SetComplete()
Return "OK!"
Catch ex As Exception
ContextUtil.SetAbort()
Return "Failed" + ex.Message
End Try


End Function


Public Sub DrawMoneyFromA(ByVal amount As Long)
'從 A 中提取一定的錢
Dim cnn As New SqlConnection("server=server1;database=A;uid=sa;pwd=Password@1;enlist=false")
cnn.Open()
Dim cmd As New SqlCommand("Update bank set amount=amount - " & amount & " where bankaccount='A'", cnn)
cmd.ExecuteNonQuery()

End Sub

Public Sub DepostMoneyToB(ByVal amount As Long)
'往 B 帳戶加入一定的錢
Dim cnn As New SqlConnection("server=server2;database=B;pwd=Password@1;uid=sa;enlist=false")
cnn.Open()
Dim cmd As New SqlCommand("Update bank set amount=amount + " & amount & " where bankaccount='B'", cnn)
Throw New Exception("ff")
cmd.ExecuteNonQuery()
End Sub


然後調用web service, 發現A 的餘額是 900, 而 B 的帳戶仍舊是 1000 ,分散式交易失敗。

可能的原因是什嗎?

同樣上面的代碼只要稍作修改就可以了。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。