0

在这段代码中,.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
4

1 回答 1

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()
于 2012-04-22T00:44:16.820 回答