0
我在COM +中運行的方法,它看起來有點像下面這樣:提交事務,如果它的一部分失敗
[AutoComplete(true)]
public bool DoSomething(string args)
{
DoSomeDBWork(args);
try {
DBAccess.RunQuery("INSERT fail");
return 0;
}
catch (Exception ex)
{
//Hide the error because it doesnt matter - log it out though for completeness
DBAccess.RunQuery("INSERT INTO Log VALUES ('{0}')", ex.ToString());
return -1
}
}
OK所以這種方法運行時,DoSomeDBWork()方法運行,做了一些最新信息DB。
'insert fail'運行失敗。 我只是想忽略它,但註銷它失敗了。
但是我收到了一個錯誤: System.Transactions.TransactionException:該操作對事務狀態無效。
我假設即使我發現異常,因爲它是數據庫錯誤,它會自動回滾事務。
錯誤來自'insert into log ...'
以及在DoSomeDBWork()中更新的所有內容也會回滾。
如何忽略失敗的線?
但是,如果我在我的catch中做了回滾 - 它也將回滾'DoSomeWork'中早些時候做的所有事情嗎?我無法執行除了失敗的那一行以外的所有內容嗎? – 2013-03-11 13:15:22
我沒有看到這個要求,對不起。在這一點上,你將不得不引入一個嵌套事務。再次,不知道如何編寫** DBAccess **,但我的猜測是需要修改以支持嵌套事務並確保「INSERT Fail」在該事務的範圍內運行。 – sanbornc 2013-03-11 14:37:33