■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句では遭えてロールバックを行っているので
ロールバックを行わないのは不安です。。
勉強不足で申し訳ございませんが
よろしくお願いいたします。
|