Transactionscope rollback

本文关键字:rollback Transactionscope | 更新日期: 2023-09-27 18:10:39

我在主方法中有一个方法。如果父方法失败,我需要子方法能够回滚。两个数据连接使用不同的服务器。在我添加事务范围之前,它们工作得很好。但是当我将它们绑定在一起时,子方法终止了。

编辑:错误消息:分布式事务管理器(MSDTC)的网络访问已被禁用。请使用组件服务管理工具在MSDTC的安全配置中启用DTC进行网络访问。

public static void LoopStudent() 
{
  try 
  {
    using(TransactionScope scope = new TransactionScope()) 
    {
      String connString = ConfigurationManager.AppSettings["DBConnection"];
      using(SqlConnection webConn = new SqlConnection(connString)) 
      {
        webConn.Open();
        String sql = "select * from students";
        using(SqlCommand webComm = new SqlCommand(sql, webConn)) 
        {
          using(SqlDataReader webReader = webComm.ExecuteReader()) 
          {
            if (webReader.HasRows) 
            {
              while (webReader.Read()) 
              {
                int i = GetNextId();
              }
            } 
            else 
              Console.WriteLine("wrong");
          }
        }
      }
      scope.Complete();
    }
  }
  catch (Exception ex) 
  {
    Console.WriteLine("Error " + ex.Message);
  }
} //End LoopThroughCart         
public static int GetNextId(String str) 
{
  int nextId = 0;
  String connString = ConfigurationManager.AppSettings["SecondDBConnection"];
  try 
  {
    using(TransactionScope scope = new TransactionScope()) 
    {
      using(SqlConnection webConn = new SqlConnection(connString)) 
      {
        webConn.Open();
        using(SqlCommand webComm = new SqlCommand("GetNextId", webConn)) 
        {
          //do things
        }
      }
      scope.Complete();
    }
  } 
  catch (TransactionAbortedException ex) 
  {
    Console.WriteLine("TransactionAbortedException Message: {0}", ex.Message);
  } 
  catch (ApplicationException ex) 
  {
    Console.WriteLine("ApplicationException Message: {0}", ex.Message);
  }
  return nextId;
} //End GetNextId

Transactionscope rollback

如果你不在你的内部方法中使用RequireNew,如果父方法提交事务失败,内部方法将自动回滚。

你得到什么错误?