1

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

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,但它也在客户端超时。

无论如何区分发出回滚命令的超时和该命令执行完成的超时?

在此先感谢,本

4

1 回答 1

0

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

此外,您还可以捕获和编程

异常 - 尝试提交事务时发生错误。

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

安德鲁

于 2009-08-12T08:39:02.067 回答