使用交易时是否有最佳的异常处理方法?我应该说我使用Sql server作为我的数据源和VB.net 2010。
谢谢
答案 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块)并让异常命中运行时(系统消息)或在运行时将它们捕获到通用异常处理程序中。