以前に書いたのですが、SQL ServerにDateTime2型が増えて、100ナノ秒単位の捕捉が可能になりました。(Windows2008等のサーバーOS下で)
嬉しがっていたのですが、不具合が起こりました。
いままでは、ありがちな楽観的排他制御なんですが、
事前に元データを取得して DataSet(dt) に取り込んでおく。
SQL= "update TABLE set xxx=xxx where 更新日時=@元更新日時"
para meter設定で @元更新日時 = dt.rows[n]["更新日時",DataRowVersion.Original]
ur.ExecuteNonQuery(sql, para, CommandType.Text);
のような処理で対処していました。
この、["更新日時"]の型を DateTime型からDateTime2(7)に変えて、代入する値を、sysDateTime()でセットするように変えました。
すると、この Update文が成立しません。更新日時=@元更新日時 が不成立です。
型にDateTimeに戻すと、成立するので、どうも型の動作に問題がありそう。
DataRow()に取り込んだとき値は丸められるのでしょうか、Debug.printで見る限り同値でした。
結局、排他用には使えなさそう。となると、DateTime2()の使い道は狭まるのだろうか。
「排他制御は、TimeStampを使え」ということでしょうが、他のRDBと協調したいので、使いたくないのが本音なのですが...
0 件のコメント:
コメントを投稿