2

データベースに Datetime のタイプがありますが、 DateTime.Nowすべてを保存したい場合は問題ありませんが、値を保存したい場合はエラーが発生します

                LogTime = log.AnswerTime ?? DateTime.Now

datetime2 データ型を datetime データ型に変換すると、範囲外の値になりました。

LogTime 値は次のとおりです。4/3/2013 12:05:04 PM

大丈夫だと思うのですが、なぜでしょうか?

4

1 に答える 1

3

.NET では、DateTime2 と DateTime の両方が System.DateTime にマップされるため、変換は行われません。問題は、データベースが 2 つのデータ型を処理する方法に起因します。たとえば、MSSQL では、両者の扱いが異なります。MSSQL では、DATETIME は 1753/1/1 から 9999/12/31 までをサポートし、DATETIME2 は 0001/1/1 から 9999/12/31 までをサポートします。

これは、DateTime2 列からデータベースから null の値を読み取っている場合、0001/1/1 を取得することを意味します。これは、間違いなく範囲外の値です。

.NET はこれに関するヘルプを提供しており、 http://msdn.microsoft.com/en-us/library/bb675168.aspxで読むことができます。

SqlDb 型を使用していることを確認し、データ グリッドを使用している場合は、列で typeof が適切に使用されていることを確認します。

new DataColumn("myDate", typeof(DateTime))
于 2013-04-13T13:46:45.283 に答える