「Trasaction期間は不用意に長引かせてはいけない」というのは基本と思います。
BeginTran
try
update文いくつか
Commit
catch
Rollback
end try
の流れが単純な流れですね。ケッタイなソースがありまして。
BeginTran
try
update文いくつか
dim 結果数 as integer = select count(*) where 結果確認条件 '<== 上記のUpdateが正常に処理されたか否かの確認取得のようだ
if 結果数 =0 then
dim rc as dialogResult = Messagebox.show("更新できなかったので、ロールバックします")
Rollback
else
Commit
endif
catch
Rollback
end try
こんなのOKなの? トランザクション期間の間にUI(MessageBox)を介してOperatorと会話するのは。
気付かずにMessageBoxを放置したらどうなるの。DBは一定期間放置されたら自動rollbackが掛かると思うのですが、設定如何ではズット待ち状態になるかも知れません。(確認してませんが)
指摘したら、「当システムのユーザーは少なく。RollBackが走っても再度入力するから構わない。」とPM側の技術責任者から返事がきた。
Webアプリで Session変数に コネクション情報とともに、トランザクションも格納して、異なる頁で RollBack/Commitするシナリオを書いている人もいました。
プログラム的には可能なだけに、説得が難しい。結局説得できずに放置してます。(御免なさい)
なぜ周囲にこの手の人が居るのだろ。業界的にも同じような比率で存在してそうですね。彼らを教育するのは誰なんだろう。
怪しげな知識しか持たない設計者を識別できる眼鏡を探してます。ご存知の方、ご一報を。
エラソーに書いてますが、私間違ってないですよね? 不安になってきた。上記のスタイルがOKだとしたら.....辛いことになる...orz;