.net:使用事务时异常处理的最佳实践?

时间:2011-02-12 10:43:53

标签: .net sql-server exception-handling transactions

使用交易时是否有最佳的异常处理方法?我应该说我使用Sql server作为我的数据源和VB.net 2010。

谢谢

3 个答案:

答案 0 :(得分:2)

IDbTransaction将在处理完毕后自动回滚。所以正常模式看起来像下面这样(C#,我将把翻译留给VB.NET作为练习):

using(SqlConnection connection = ...)
{
    connection.Open();
    using(SqlTransaction transaction = connection.BeginTransaction(...)
    {
        ... do database stuff

        // Last line in the using block commits the transaction
        transaction.Commit();
    } // Transaction disposed here - if Commit wasn't called, it will be rolled back
} // Connection disposed here

即。如果发生异常,则不需要显式调用Rollback。您很少会明确地调用Rollback - 只有在检测到需要显式回滚的事务中间条件(例如业务规则违规)时才需要它。

异常处理通常在更高级别完成,即调用代码中可能有try / catch块。

答案 1 :(得分:1)

由于“使用”在VB中不可用,你必须编写类似下面的内容(抱歉是在C#中...我不能用心写vb)。这是与using语句相同的功能。

connection.Open();
SqlTransaction transaction;
try {
    transaction = connection.BeginTransaction(...)

    ... do database stuff

    // Last line in the using block commits the transaction
    transaction.Commit();
} finally {
    if (transaction != null) transaction.Dispose();
}

此外,始终建议不要使用本机API,而应使用TransactionScope类。这很重要,因为您可能想要添加其他交易资源。

答案 2 :(得分:0)

哦,关于异常处理。那通常是一个理论问题。大多数人捕获并吞下异常并显示错误消息。其他人,更理论化的人只是清理(使用using或finally块)并让异常命中运行时(系统消息)或在运行时将它们捕获到通用异常处理程序中。