0

このコードでは、.commit() の後の SomeFunction() はトランザクションの一部と見なされますか? 何かが爆発した場合、ロールバックしますか?動的レコードが挿入された後にさらに処理を行う必要があり、すべてを 1 つの大きな塊で処理したいと考えています。

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()

呼び出しを Exception ブロックの下に移動Somefunction()し、可能であれば別の 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 に答える