我有一个在COM +中运行的方法,看起来有点像:
[AutoComplete(true)]
public bool DoSomething(string args)
{
DoSomeDBWork(args);
try {
DBAccess.RunQuery("INSERT fail");
return 0;
}
catch (Exception ex)
{
//Hide the error because it doesnt matter - log it out though for completeness
DBAccess.RunQuery("INSERT INTO Log VALUES ('{0}')", ex.ToString());
return -1
}
}
确定所以方法运行,DoSomeDBWork()方法运行,对数据库进行一些更新。
“插入失败”运行,失败。 我只是想忽略它,但注销它失败了。
但是我收到了错误: System.Transactions.TransactionException:该操作对事务状态无效。
我假设即使我抓住了Exception,因为它是一个DB错误,它会自动回滚事务。
错误来自“插入日志...”行
并且还会回滚在DoSomeDBWork()中更新的所有内容。
如何忽略失败的线?
答案 0 :(得分:1)
您必须回滚用于“插入失败...”之前尝试插入日志的事务。不熟悉DBAccess及其工作原理,但一旦您回滚,您应该可以隐式或显式地启动新事务。
[AutoComplete(true)]
public bool DoSomething(string args)
{
DoSomeDBWork(args);
try {
DBAccess.RunQuery("INSERT fail");
return 0;
}
catch (Exception ex)
{
DBAccess.Rollback();
DBAccess.RunQuery("INSERT INTO Log VALUES ('{0}')", ex.ToString());
return -1
}
}