.net mysql dts 分布式事務 Multiple simultaneous connections or connections with different connection··


如果在C#中使用TransactionScope類(分布式事務),則須注意如下事項:
1、在項目中引用using System.Transactions命名空間(先要在添加net組件的引用);

2、對MSDTC組件設置:
步驟:
  在控制面板-->管理工具-->服務 中,開啟Distributed Transaction Coordinator 服務。或者直接在運行里面輸入  dcomcnfg
a.控制面板->管理工具->組件服務->計算機->我的電腦->右鍵->屬性
b.選擇MSDTC頁, 確認"使用本地協調器"
c.點擊下方"安全配置"按鈕
d.勾選: "允許網絡DTC訪問","允許遠程客戶端","允許入站","允許出站","不要求進行身份驗證".
e.對於數據庫服務器端, 可選擇"要求對呼叫方驗證"
f.勾選:"啟用事務Internet協議(TIP)事務"。
g.在雙方防火牆中增加MSDTC.exe例外
   可用命令行: netsh firewall set allowedprogram %windir%\system32\msdtc.exe MSDTC enable

 

如果只是一台主機,或者是本地測試,可以這樣

image

今天在拿以前sqlserver中運行的好好的dts事務執行時候,在結合mysql數據庫的時候,報錯,報錯信息:

Multiple simultaneous connections or connections with different connection strings inside the same transaction are not currently supported.

那么mysql到底支持分布式事務么?

答案是支持,但是有一個條件。那就是你事務里面執行的語句/存儲過程,他們只能指向同一個connstr鏈接字符串,也就是mysql的事務,只能對同一個數據庫,並且是同一個鏈接字符串,我今天遇到報錯,就是在一個事務里面,查詢了2個不同的數據庫,所以就報錯了。

上一下我的代碼

TransactionOptions transactionOption = new TransactionOptions();

            //設置事務隔離級別
            transactionOption.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;

            // 設置事務超時時間為5分10秒
            transactionOption.Timeout = new TimeSpan(0, 5, 10);

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOption))
            {
                try
                {

                    // 多次執行數據庫的代碼,我是用多個存儲過程

                    scope.Complete();
                    //在Complete后面不要寫代碼,因為這個事務已經完成了 否則會報錯 
//可以看看這個報錯事務報錯 [Exception] 當前 TransactionScope 已完成
} catch (Exception ex) { throw new MessageJxtException(Message.操作失敗本次操作沒有執行); } } 關於這里面的 事務隔離級別transactionOption.IsolationLevel 可以看看
http://www.cnblogs.com/zemliu/archive/2012/06/17/2552301.html

可以參考一下這個網址的分析 http://www.cnblogs.com/nielsliu/articles/1280038.html

image

image

引發異常:Multiple simultaneous connections or connections with different connection strings inside the same transaction are not currently supported.

image

引發異常:MySQL Connector/Net does not currently support distributed transactions.

結論:MySql目前版本(MySql5.0, MySQL Connector/Net 5.2.3)支持同一個連接字符串內多個連接實例的事務,不支持不同連接字符串以及不同數據庫之間的事務。

還可以參考 http://www.cnblogs.com/wonderful_morining/archive/2012/04/18/2455728.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM