- PR -

トランザクションについて

1
投稿者投稿内容
Ren
会議室デビュー日: 2006/08/17
投稿数: 2
投稿日時: 2006-08-17 14:29
複数端末から更新をかける方法を教えて下さい。

データベースはMSDEを使っています。

BeginTransで
100 レコード位いっぺんに開き、修正して
登録ボタンを押して、
commitの処理をします。

しかし、この間に別のPCから、
呼出があると、
トランザクションが重なりエラーになります。 (タイムアウト)

どうしたら複数PCからデータを呼び出し、
修正が加えられるのでしょうか

このようなプログラムの場合はトランザクション処理はしない物なのでしょうか
先輩方アドバイスを宜しくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-08-17 15:04
引用:

Renさんの書き込み (2006-08-17 14:29) より:

しかし、この間に別のPCから、呼出があると、
トランザクションが重なりエラーになります。 (タイムアウト)


100 件程度の処理では、タイムアウトになるほどの待ち時間はないかと思います。
ということは、トランザクションを開始して、そのままオペレーションするような仕様ということでしょうか?

引用:

このようなプログラムの場合はトランザクション処理はしない物なのでしょうか


場合によるでしょうね。(ロック管理テーブルを作る場合も...)
「楽観的ロック」 と 「悲観的ロック」 について調べてみてください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2006-08-18 18:14
じゃんぬさんが大体のことを書かれていますので、少々別の角度から。

元々の仕様がどのようになっているかが不明なのですが、
「100件のデータ更新を、1トランザクションとする」
という仕様である場合は、トランザクションが終了していないので
エラーとなる状態が正しいと思います。

そうではないのでしたら、トランザクションのBeginとCommitの位置を動かしてしまう
のがいいのではないでしょうか。
※極端にいえば、1件単位でBegin〜Commitなど

最終的には、更新仕様次第、というところではないのか、と思います。
Ren
会議室デビュー日: 2006/08/17
投稿数: 2
投稿日時: 2006-08-23 08:25
じゃんぬねっとさん
返信有難う御座います。

「楽観的ロック」 と 「悲観的ロック」 について調べてみました。
まだ、知識としては曖昧ではありますが勉強していきたいと思います。

Ahfさん
返信有難う御座います。

「楽観的ロック」 と 「悲観的ロック」をふまえて
BeginとCommitの位置を動かしてみました。

大変勉強になりました。有難う御座います。
1

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