在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提前
答案 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;
}