许多例子都主张显式回滚数据库事务,大致如下:
using (var transaction = ...)
{
try
{
// do some reading and/or writing here
transaction.Commit();
}
catch (SqlException ex)
{
// explicit rollback
transaction.Rollback();
}
}
然而,我倾向于这样做:
using (var transaction = ...)
{
// do some reading and/or writing here
transaction.Commit();
}
当发生异常时,我只是依赖于未提交的事务的隐式回滚。
依赖这种隐式行为有什么问题吗?有人有一个令人信服的理由为什么我不应该这样做吗?
不,它不是特别需要的,但是我可以想到它可能是个好主意的两个原因:
有些人可能会争辩说,使用transaction.Rollback()
更清楚在什么情况下事务不会被提交。
在处理事务时,重要的是要认识到某些锁只有在事务回滚或提交时才会被释放。如果您正在使用using
语句,那么当事务被处理时,事务将被回滚,但是如果由于某种原因你需要在语句中进行一些错误处理using
块,在执行复杂/耗时的错误处理之前回滚事务(删除锁)可能是有利的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)