如果事务的一部分失败,则提交事务

本文关键字:提交事务 失败 一部分 事务 如果 | 更新日期: 2023-09-27 18:03:13

我有一个在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
    }
}

OK方法运行,DoSomeDBWork()方法运行,对数据库进行一些更新。

'insert fail'运行,失败。我只想忽略它,但退出时发现它失败了。

但是我得到一个错误生成:System.Transactions.TransactionException:该操作对事务的状态无效。

我假设即使我捕获了异常,因为它是一个DB错误,它也会自动回滚事务。
错误来自'insert into log…'行
并且在DoSomeDBWork()中更新的所有内容也会回滚。

如何忽略错误行?

如果事务的一部分失败,则提交事务

您必须回滚用于"Insert Fail…"的事务。尝试插入日志之前。不熟悉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
    }
}