S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

.NET FrameworkのDateTime型とSQL Serverのdatetime型

この時の問題を考えてて、DateTime型についてみてみると。

.NET FrameworkのDateTime型

DateTime 構造体 (System)

.NET Framework 2.0 以降では、DateTime 構造体には、Ticks フィールドとプライベートの Kind フィールドとが連結された、合わせて 64 ビットのフィールドが格納されます。 Kind フィールドは、DateTime 構造体によって表される時刻が "現地時刻である"、"世界協定時刻 (UTC: Coordinated Universal Time) である"、または、"未指定のタイム ゾーンの時刻である" のいずれかを示す 2 ビットのフィールドです。 Kind フィールドは、主にタイム ゾーン間の時刻変換時に使用され、時刻の比較や算術計算には使用されません。 Kind フィールドの値は、Kind プロパティで取得できます。

となっているから、SQLServerのdatetime型は2.0より前の.NET FrameworkでのDateTime型にマップしてたってことかな?

SQL Serverのdatetime型

datetime (Transact-SQL)
SQLServerのdatetime型は、「Ticks フィールドとプライベートの Kind フィールドとが連結された、合わせて 64 ビット」の範囲に入らない場合(タイムゾーンやら日付範囲)になると、OutOfRangeExceptionって感じかな。
同じ.NETのDateTime型でも、SQL Serverのdatetime型の範囲内ならInsert/Updateでエラーになんないよ、ってのが.NETのDateTime.Nowでエラーとならない理由と理解してみる。