- - PR -
DBへの排他制御の方法について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-24 17:37
> つまり、WHERE句に条件を書いてUPDATE文を走らせた後
> SELECT句で更新を確認する。。ということでしょうか? 違います。 まず、ユーザに表示するためにデータを取り出してきたときに、そのデータの 更新日時も一緒に取り出してきます。 ユーザが修正等を行って、データを更新しようとするとき、Where句内に 最初に取り出してきた更新日時と現在の更新日時が同じかどうかの判定を いれます。 こうしておくと、データを取り出してきたときと更新日時が変わっていたら データは更新されません。 更新時に変更のあったデータの数はたいてい取り出せるはずなので、 これが0件(更新されていない)だったら別のユーザによってデータが 変更されていた、と考えられ、そこでエラーメッセージをだすなり なんなりします。 #というのが甕星さんが書いているSQL文の意味です。 | ||||||||
|
投稿日時: 2006-05-24 17:39
そいつぁすごいな。ありえねぇ。 クリーンビルドしましたか?以前の問題だわ。 VS落としても再現するんだったらブツをどっかにあげてMSに訴えりゃよかったのに。 | ||||||||
|
投稿日時: 2006-05-24 17:41
たぶん、Option Compare Binary/Textの設定による違いでしょう。 VBの場合、等値演算子(=)はOption Compare ステートメントの影響を受けますが、 Equalsメソッドは影響を受けません。これは仕様です。 また、C#の場合はOption Compare ステートメント自体がないので 等値演算子(==)とEqualsメソッドは常に同じ結果を返します。 値に英字が含まれていませんでしたか? | ||||||||
|
投稿日時: 2006-05-24 17:59
更新した行数って取り出せたんですね。。。 知ってたら、よほど楽に書けていたでしょうに。。。 ありがとうございます。 勉強になりました(^^
C#で開発していました。 (最近VBでしか開発しいないもので書き方がVBになっているかもですが。。) (==)とEqualsメソッドは必ずしも同じ結果では無いと記憶しています。。 C# では文字列の比較に Equals を使うな ↑少し内容に違和感は感じますが ちなみに値に英字が含まれていませんでしたか?というのはどういう意味なのでしょう? # 質問ばかりでごめんなさい。。。 [ メッセージ編集済み 編集者: なせ 編集日時 2006-05-24 18:00 ] | ||||||||
|
投稿日時: 2006-05-24 18:08
そうですよ。同じ結果にしたければ、等値演算子をオーバーロードして、Equals() と同じ働きをするしなければなりません。 そして、String はそうなっています。 文字列の "1" と数値の 1 を比較した、なんてオチではないですよね? なせさんが仰る結果になるコードを完動する形で欲しいですね。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-05-24 18:10
C#だったらコンパイル通らなくね? | ||||||||
|
投稿日時: 2006-05-24 18:21
演算子の方ならね。 その辺の記憶が曖昧になって「== と Equals が違う!」と言ってるのかな、と。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-05-24 18:24
いえ、同じはずです。等値演算子(=={op_Equality})の実装はEqualsメソッドを使用しています。
(VBでは)Option Compare Textの場合、大文字と小文字が区別されないので、 期待する結果を得られなかったのでは?と思ったのですが、違うようですね。 |