执行C#代码时出现事务问题
在M代码中,我得到一个错误,“此SqlTransaction已完成;不再可用。”生成此代码的代码行如下 sqlTransaction执行C#代码时出现事务问题,c#,sql-server-2005,transactions,C#,Sql Server 2005,Transactions,在M代码中,我得到一个错误,“此SqlTransaction已完成;不再可用。”生成此代码的代码行如下 sqlTransaction MSSqlConnectionHandler.CommitTransaction(); 此CommitTransaction函数是 public static void CommitTransaction() { try { _theTran.Commit(); }
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 Previous该错误表示事务正在代码中的其他地方提交,是否为可在其他地方使用和提交的实例变量?可能是事务所在的连接已关闭。如果是这样的话,在调用时:
_theTran.Commit();
错误将会发生
谁在打电话
CommitTransaction
在提交之前应该做一些检查,比如:
if (conn.State == ConnectionState.Open)
{
if (_theTran != null)
{
CommitTransaction();
}
conn.Close();
}
就异常处理而言,异常处理程序除了重新刷新之外什么也不做。如果提交时发生异常,请尝试回滚并始终抛出。我认为你不需要内心的尝试
try
{
_theTran.Commit();
}
catch (Exception)
{
_theTran.Rollback();
throw;
}
为什么要捕获异常,然后(错误地)重新抛出异常?这是毫无意义的,而且你失去了你的呼叫堆栈什么是
\u theTran
?它有一种静态方法的代码味道。@Mitch Wheat:CommitTransaction()不是我写的,它是由团队的前程序员写的,我不是在指责他。我只是告诉大家,我必须遵循代码的前一个结构,我必须使用hat方法,不管怎样,我经常在需要澄清或无法处理错误的地方发布代码段,而这个网站和像你这样的人是我唯一的希望。你能告诉我捕获然后(错误地)重新抛出异常是什么意思吗?我需要更多的解释来实现它。建议你继续@Daniel a.White指出全局/静态\u theTran。。。。