【问题标题】:IDbTransaction Rollback TimeoutIDbTransaction 回滚超时
【发布时间】:2009-08-12 08:36:17
【问题描述】:

我正在处理一个有趣的情况,我在单个事务中执行许多数据库更新。如果这些更新因任何原因失败,事务将回滚。

IDbTransaction transaction
try {
    transaction = connection.BeginTransaction();

    // do lots of updates (where at least one fails)

    transaction.Commit();
} catch {
    transaction.Rollback(); // results in a timeout exception
} finally {
    connection.Dispose();
}

我相信上述代码通常被认为是在事务中执行数据库更新的标准模板。

我面临的问题是,当 transaction.Rollback() 被发送到 SQL Server 时,它也在客户端超时。

是否有区分发出回滚命令的超时和该命令执行到完成的超时?

提前致谢, 本

【问题讨论】:

    标签: c# sql-server ado.net transactions rollback


    【解决方案1】:

    您应该指定特定的捕获,即查看抛出的不同异常。如果在处理 sql 命令时出现错误,则应抛出 SqlException,以便捕获不同的异常以区分您的项目。

    您还可以捕获更多内容并进行编程

    异常 - 尝试提交事务时出错。

    InvalidOperationException - 事务已经提交或回滚。 -或者- 连接中断。

    安德鲁

    【讨论】:

    • 当然我可以捕获 transaction.Rollback() 方法调用的未记录的超时异常(和其他异常),但是我如何知道回滚是否发生。我想超时异常将在两种不同的情况下引发;第一个是如果无法向 SQL Server 发出回滚命令,第二个是如果发出了回滚命令,但耗时太长......
    • 我已经看到了上述示例的进一步实现,其中在回滚方法调用周围有进一步的 try catch,因此您可以在此处捕获回滚过程本身引发的异常。同样,如果无法回滚,这可能是一个 sql 异常,我会认为是超时异常或特定事务相关错误的无效操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2012-04-08
    • 2013-05-29
    相关资源
    最近更新 更多