次のような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:操作はトランザクションの状態に対して無効です。
例外をキャッチしても、DBエラーであるため、トランザクションが自動的にロールバックされていると思います。
エラーは「ログに挿入...」の行から発生し
、DoSomeDBWork()で更新されたすべてのものもロールバックされます。
失敗した行を無視するにはどうすればよいですか?