ADO.NET Parameterized SQLにDateTime.Maxを渡すとデータが来ない

備忘録。

ADO.NETで以下のようなParameterized SQLを設定、@EndにDateTime.Maxを設定すると検索件数が0になってしまう。
SELECT DISTINCT(name) FROM persons WHERE @Start<=releasedate AND releasedate<@End

@Endを'9999/12/31 23:59:59.9999999'Link としてMySQLのコマンドラインからこの文を打ち込むとデータが来る一方、'10000/1/1 0:00:00'とすると件数0。5桁の西暦で不具合起こすのはまぁあり得る話かなとは思いますが、DateTime.Maxもこの辺の際どい扱いを受けているのかも。

環境としてはサーバーはDebianのMySql 5.7.16、クライアントはMySql.Data 6.9.9、.NET Framework 4.5なのですが、この現象は私の開発マシン(Windows 8.1)や仮想マシン上のWindows 7では問題なかった実行ファイル一式が、別人のPC(Windows 8.1)だと不具合になったことで発覚。サーバーもクライアントも同じプログラム使っているのになぜ発生の有無があるのだろう。

@End=DateTime.Maxということは事実上releasedate上限無しということなので、WHERE句から外してやると正常に。面倒くさいけど@EndがDateTime.Maxの時はWHERE句に入れないようにクエリー文を切り替えたほうが無難そう。

— posted by mu at 10:14 am   commentComment [0]  pingTrackBack [0]

この記事に対する TrackBack URL:

設定によりTB元のページに、こちらの記事への言及(この記事へのリンク)がなければ、TB受付不可となりますのであらかじめご了承下さい。

コメントをどうぞ。 名前(ペンネーム)と画像認証のひらがな4文字は必須で、ウェブサイトURLはオプションです。

ウェブサイト (U):

タグは使えません。http://・・・ は自動的にリンク表示となります

:) :D 8-) ;-) :P :E :o :( (TT) ):T (--) (++!) ?;w) (-o-) (**!) ;v) f(--; :B l_P~ (QQ)

     

[X] [Top ↑]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.4546 sec.
prev
2017.2
next
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28