5 列のデータテーブルがあり、行にデータが入力され、トランザクションを介してデータベースに保存されます。
保存中にエラーが返されます:
datetime2 データ型を datetime データ型に変換した結果、範囲外の値になりました
読んで字のごとく、私のデータテーブルには のタイプがありDateTime2
、私のデータベースには があるということになりますDateTime
が、これは誤りです。
日付列はDateTime
次のように設定されます。
new DataColumn("myDate", Type.GetType("System.DateTime"))
質問
これはコードで解決できますか、それともデータベース レベルで何かを変更する必要がありますか?
ベストアンサー1
短い答え
これは、 DateTimeフィールドに値を初期化しない場合に発生する可能性があります。フィールドはNULL値を受け入れず、値型であるため、null 非許容の DateTime 型のデフォルト値が使用されます。
値を設定すると問題は解決しました!
長い回答
の値は(または01/01/0001)default(DateTime)
であり、有効な SQL値ではありません。DateTime.MinValue
new DateTime(1, 1, 1)
datetime
SQL Serverのdatetimeの最小有効値は01/01/1753
グレゴリオ暦を使用しているためです。ただし、SQL Server DateTime2 は 01/01/0001 から始まる日付をサポートしています。Entity Framework は既定で日付を表すために DateTime2 を使用するため、生成された SQL は、生成された DateTime2 値を SQL Server 側の DateTime 値に暗黙的に強制変換します。