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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.1572 の関連記事表示

<< 0 >>
■1572  Re[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句では遭えてロールバックを行っているので
    ロールバックを行わないのは不安です。。
    
    勉強不足で申し訳ございませんが
    よろしくお願いいたします。
    
    
    
    
記事No.1535 のレス /過去ログ10より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -