- PR -

ADO.NETのトランザクションについて

1
投稿者投稿内容
こぶた
会議室デビュー日: 2006/06/18
投稿数: 3
投稿日時: 2006-06-18 12:31
VB.NETとADO.NETを用いて業務アプリを開発しています

DBの更新処理で

@テーブルAに1レコード追加
AテーブルBに1レコード追加
B主キーをもとにテーブルAを1レコード削除
C主キーをもとにテーブルBを1レコード削除
を処理をしたいのですが、@、A、B、Cの処理は、
別々のメソッドで処理されていて、
@、A、B、Cのどれか失敗した場合は、
ロールバックしたいのですが、
@、A,B、Cの間で結構やる処理が多いのです

COM+は使用していません。

こういう場合は、どのようにトランザクションを
実装したら、DBの一貫性が保たれるか、
アドバイスして頂けないでしょうか?

よろしくお願いします




かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-06-18 12:54
これは
どのぐらいの頻度で、どんなタイミングで動いて、
どのぐらい時間のかかる処理なんでしょうか?

結構やる処理が多いということですが
実際にどのぐらい処理時間を見込んでいますか?

DBを開く前にできることはすべてやっておいて
1の直前で開いて4の直後に閉じるのが
一番楽で確実だとは思いますが、用件によると思います。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-06-18 13:05
そうですね。
僕も、あまり関係のない処理を長々とやっている際にバグでも含めて、失敗したのにコミットしちゃうことの方が怖いです。
なので、更新は1メソッドに固めて見渡せる程度のコード量にした上で、1の「直前」で開始して、4の直後にコミットです。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-06-18 13:32
引用:

こぶたさんの書き込み (2006-06-18 12:31) より:
こういう場合は、どのようにトランザクションを
実装したら、DBの一貫性が保たれるか、
アドバイスして頂けないでしょうか?



問い:DBの一貫性が保つ手順を示せ。
答え:トランザクションを開始し、追加・削除処理し、トランザクションをコミットする。

ではダメなのでしょうか?

メソッドが4つあることを気にされているのでしょうか?
メソッドが4つあっても共通のコネクションを使う限りトランザクションは一貫します。

それとも処理が多いことを気にされているのでしょうか?
トランザクションは一貫性と処理が多さはとくに関連はないと思います。速度などのパフォーマンスの問題は別途あるかもしれませんが。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-18 15:47
引用:

こぶたさんの書き込み (2006-06-18 12:31) より:

別々のメソッドで処理されていて、(1)、(2)、(3)、(4)のどれか失敗した場合は、ロールバックしたいのですが、(1)、(2)、(3)、(4)の間で結構やる処理が多いのです
(snip)
こういう場合は、どのようにトランザクションを実装したら、DBの一貫性が保たれるか、アドバイスして頂けないでしょうか?


連続するデータベースアクセス処理の記述方法

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
こぶた
会議室デビュー日: 2006/06/18
投稿数: 3
投稿日時: 2006-06-18 19:41
こぶたです
みなさん、アドバイスありがとうございます。

がんばってやってみます。

1

スキルアップ/キャリアアップ(JOB@IT)