一、业务需求

由于项目中用到了多个数据库,在业务逻辑层进行复杂业务处理时,需要同时调用DAO层的统一数据库或多个数据库的多个事务操作,因此需要添加业务逻辑层的事务处理。

二、解决方案

使用.NET Framework2.0中的事务处理类TransactionScope 类,在程序中需要添加事务处添加事务处理代码。

三、使用方式及源码

1、配置数据库服务器环境:
      1. “开始”菜单中,选择“运行”,输入“dcomcnfg”,回车。
      2. 展开“组件服务”对话框,选择“组件服务->计算机->我的电脑->Distributed Transaction Coordinator”,右击本地DTC属性,展开如下配置视窗。

    配置如下:

    .Net下分布式事务处理的配置

    2、配置开发服务器 MSDTC 以允许传出网络事务:

    1从“开始”菜单中,选择“运行”,输入“dcomcnfg”,回车。

    2展开“组件服务”对话框,选择“组件服务->计算机->我的电脑”,右击我的电脑属性,展开如下配置视窗。

        1. 在“MSDTC”选项卡上,单击“安全配置”,配置如下。

      .Net下分布式事务处理的配置

      3、代码调用

      (1)引入命名空间:System.Transactions。

      (2)添加事务处理代码如下(只是一个测试实例)

      using (TransactionScope scope = new TransactionScope()) 
                
      { 
                    
      string strCache = @"Data Source=192.168.128.33;Initial Catalog=MLEC_CACHE;Persist Security Info=True;User ID=sa;Password=admin_123456;connection reset=false;connection lifetime=50;min pool size=1;max pool size=500"; 
                    
      string strFormal = @"Data Source=192.168.128.33;Initial Catalog=MLEC_FORMAL;Persist Security Info=True;User ID=sa;Password=admin_123456;connection reset=false;connection lifetime=50;min pool size=1;max pool size=500"; 
                    
      string strSqlCache = "Update SalesMix Set prdDesVendor='bb' Where id=25"; 
                    
      string strSqlFormal = "Update SalesMix Set prdDesVendor='cc' Where id=27"; 
                    
      SqlConnection connCache = new SqlConnection( strCache ); 
                    
      SqlConnection connFormal = new SqlConnection( strFormal ); 

                    
      SqlCommand commandCache = new SqlCommand( strSqlCache, connCache ); 
                    
      SqlCommand commandFormal = new SqlCommand( strSqlFormal, connFormal ); 

                    
      try 
                    
      { 
                        
      connCache.Open(); 
                        
      connFormal.Open(); 

                        
      commandCache.ExecuteScalar(); 
                        
      commandFormal.ExecuteScalar(); 

                        
      connCache.Close(); 
                        
      connFormal.Close(); 

                        
      scope.Complete(); 
                    
      } 
                    
      catch (Exception) 
                    
      { 
                    
      } 
                    
      finally 
                    
      { 
                        
      if (connCache.State != System.Data.ConnectionState.Closed) 
                        
      { 
                            
      connCache.Close(); 
                        
      } 
                        
      if (connFormal.State != System.Data.ConnectionState.Closed) 
                        
      { 
                            
      connFormal.Close(); 
                        
      } 
                    
      } 

                    
      return 1; 
                
      }

      四、总结

      使用上述方式代码调用方便简单,可以解决.Net程序中简单的的分布式事务处理问题(数据库服务器与应用程序服务器在同一域内,可以直接按照上述方式处理。如果在不同域内,还需要另外配置)。TransactionScope 还有许多可配置的属性,MSDN中有相关内容,在此不一一列举了。

      相关文章:

      • 2021-12-07
      • 2022-01-22
      • 2022-12-23
      猜你喜欢
      • 2021-12-13
      • 2021-06-24
      • 2021-10-03
      相关资源
      相似解决方案