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

わんくま同盟

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

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


(過去ログ 10 を表示中)
■1572 / )  Re[2]: トランザクションの状態の判定
□投稿者/ 緑茶庵 (2回)-(2007/02/27(Tue) 17:31:58)
No1537 (HIRO さん) に返信
> 2007/02/27(Tue) 14:51:29 編集(投稿者)
> 
> ■No1535 (緑茶庵 さん) に返信
>>DBへの処理途中でエラーで終了や意図的に終了した場合に(未COMMIT状態)
> 
> エラー発生時のRollBackなら
> catchの中で行えば良いのではないでしょうか?
> 
> tryに対応するcatchが無いのは何か意図していますか?
> 
> 下記はVB.NETですが参考になるかと思います
> http://www.microsoft.com/japan/msdn/thisweek/step7/ADONET_Transaction/

HIRO さん ご返信をありがとうございます。

catch を使用しなかったのは例外発生時以外に
意図的に終了する場合があるためでした。

try
    //DML文処理1(省略)

    int execCount = コマンド.execNonQuery();

    if (execCount == 0)
    {
        MessageBox.Show("更新件数が0件のため処理を中止します");
        return;
    }

    //DML文処理2(省略)

    //コミット
    trans.Commit();
finally
{
    //ロールバック処理(省略)
}


ただ、この処理のようにCommitを行う前にreturnを行った場合でも
DBConnectionのお陰なのか、実際にDBへの更新は行われませんでした。

finallyでロールバック処理を書いたのは
保険の意味あいがとても強く、Commitしていない処理は
とにかく全てロールバック処理を行いたかったからです。

*return の前にロールバックを書いても良いかも知れませんが
 書き忘れもあるのでやりたくありません


commitせずに且つcatch を通らない処理を行う場合は
普通どうされているのでしょうか?
ロールバックを書かないのが普通なのでしょうか?
逆に catch句では遭えてロールバックを行っているので
ロールバックを行わないのは不安です。。

勉強不足で申し訳ございませんが
よろしくお願いいたします。




返信 編集キー/


管理者用

- Child Tree -