2012-04-21 45 views
0

在此代碼中將.commit()之後的SomeFunction()視爲事務的一部分?如果有東西炸燬,它會回滾嗎?插入動態記錄後,我需要做進一步的處理,並且傾向於在一個大塊中完成。Sqlclient事務和.Commit()

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 

回答

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

嗯,我有點想通了。我會把它放在一個像我想避免的sp。感謝您的確認! – Somejerk 2012-04-22 01:23:18