Sqlclient事务和.Commit()

时间:2012-04-21 23:55:21

标签: transactions transactionscope sqlclient

在这段代码中,.commit()之后的SomeFunction()会被视为事务的一部分吗?如果爆炸了什么会回滚吗?我需要在插入动态记录后进行进一步处理,并希望在一个大块中完成所有操作。

command.Transaction = transaction
Try
    command.CommandText = _
    "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
    command.ExecuteNonQuery()
    transaction.Commit()
    'do a function call here
    SomeFunction()
Catch ex As Exception
    transaction.Rollback()
End Try

1 个答案:

答案 0 :(得分:0)

不,它不会回滚,因为在调用Somefunction()时,事务已经被委托。

但是如果SomeFunction抛出任何异常,catch块仍会在transaction.Rollback()方法中抛出异常,因为没有活动事务要回滚。

您应该将Somefunction()调用移到Exception块下面,如果可能的话,将它放在另一个try catch块中。

command.Transaction = transaction
Try
    command.CommandText = _
    "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
    command.ExecuteNonQuery()
    transaction.Commit()

Catch ex As Exception
    transaction.Rollback()
End Try

    'do a function call here
    SomeFunction()