DateTime
C#のAは値型であり、参照型ではないため、nullにすることはできません。ただしDateTime.MinValue
、SQLServerのDATETIME
データ型の範囲外の定数にすることができます。
値型は、常に明示的に設定する必要がなく、常に(デフォルトの)値(ゼロ)を持つことが保証されています(この場合はDateTime.MinValue)。
結論として、データベースに渡そうとしているDateTime値が未設定である可能性があります。
DateTime.MinValue = 1/1/0001 12:00:00 AM
DateTime.MaxValue = 23:59:59.9999999, December 31, 9999,
exactly one 100-nanosecond tick
before 00:00:00, January 1, 10000
MSDN:DateTime.MinValue
SQLServerについて
datetime
1753年1月1日から9999年12月31日までの日付と時刻のデータ。精度は100分の1秒(3.33ミリ秒または0.00333秒に相当)です。値は、.000、.003、または.007秒の増分に丸められます
smalldatetime
1900年1月1日から2079年6月6日までの日付と時刻のデータ。正確に分単位で表示されます。29.998秒以下のsmalldatetime値は、最も近い分に切り捨てられます。29.999秒以上の値は、最も近い分に切り上げられます。
MSDN:SQL ServerDateTimeおよびSmallDateTime
最後に、C#DateTime
を文字列としてSQLに渡すことに気付いた場合は、最大の精度を維持し、SQLサーバーが同様のエラーをスローしないように、次のようにフォーマットする必要があります。
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
更新(8年後)
日付範囲と時間範囲でDateTime2
.netDateTime
とより適切に整合するSQLデータ型の使用を検討してください0001-01-01 through 9999-12-31
00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");
MSDN datetime2(Transact-SQL)