执行C#代码时出现事务问题

时间:2011-07-25 13:58:33

标签: c# sql-server-2005 transactions

在M代码中,我收到一个错误,“此SqlTransaction已完成;它已不再可用。”生成此代码的代码行是这样的 的SqlTransaction

MSSqlConnectionHandler.CommitTransaction();

此CommitTransaction函数是

public static void CommitTransaction()
    {
        try
        {
            _theTran.Commit();
        }
        catch (Exception Ex)
        {
            try
            {
                _theTran.Rollback();
            }
            catch (Exception InnerEx)
            {
                throw InnerEx;
            }
            throw Ex;
        }
    }

但是,我注释掉了这个MSSqlConnectionHandler.CommitTransaction();行,然后没有发生错误,但也没有保存数据。 出了什么问题,我应该在这里提供什么以使其更清楚? Thanx提前

2 个答案:

答案 0 :(得分:1)

错误表明事务正在代码中的其他地方提交,_theTran是一个可以在其他地方使用和提交的实例变量吗?

答案 1 :(得分:1)

可能性是交易所在的连接已关闭。如果是这样的话,那就叫:

_theTran.Commit(); 

会发生错误。

无论是谁打电话

CommitTransaction

应该在提交之前做一些检查,比如这样的事情:

if (conn.State == ConnectionState.Open) 
{
     if (_theTran != null)
     {
          CommitTransaction();
     }
     conn.Close();
}

就异常处理而言,异常处理程序除了重新抛出外什么都不做。如果在提交时发生异常,则尝试回滚并始终抛出。我不认为你需要内在的尝试。

try
{             
    _theTran.Commit();         
}         
catch (Exception)
{                        
    _theTran.Rollback();             
    throw;
}