C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 10 を表示中)
■1591 / )  Re[7]: トランザクションの状態の判定
□投稿者/ まさる (1回)-(2007/02/28(Wed) 10:21:07)
2007/02/28(Wed) 10:52:11 編集(投稿者)
はじめまして。まさると申します。

■No1582 (HIRO さん) に返信
> finally の件大変失礼しました。
> 
> 以下のように例外をスローさせ、catchで処理をするというのはどうでしょう?
> 
> try
> {
>     // 省略
> 
>     if (execCount == 0)
>     {
>         //catchで受け取れるよう例外をスロー
>         throw new Exception("更新件数が0件のため処理を中止します"); 
>         return;
>     }
> 
>     //Commit処理
>     trans.Commit();
>       
> }
> catch ( Exception ex )
> {
>     // ロールバック処理
>     trans.RollBack();
> }

これだと例外を握りつぶしてしまっているため、危険な実装ですよ。

明示的に発生させた例外ならば、

try
{
    // 処理1

    if ( 条件 )
    {
        throw new ApplicationException("〜");
    }

    // 処理2
}
catch ( ApplicationException apex )
{
    // ロールバック処理
    trans.RollBack();

    // 想定された例外の処理
    MessageBox.Show(apex.Message);
}
catch ( Exception )
{
    // ロールバック処理
    trans.RollBack();

    // 発生した例外をthrow
    throw;
}

のようにしたほうが良いのではないでしょうか。

#ただ、明示的にRollBackしなくとも、Commitしていなければ、
#usingステートメントを抜ける際(もしくはDisposeが呼ばれた際)に
#自動的にRollBackされるので、それでよい気がしますが。

返信 編集キー/


管理者用

- Child Tree -