web-dev-qa-db-ja.com

datetime2データ型からdatetimeデータ型への変換の結果、範囲外になりましたか?

私は日付ピッカーを含むアプリケーションで作業していますが、そのピッカーで時間を非常に古い値に設定した場合、またはこの値をデータベースに保存しようとしたときにサーバーがこの例外をスローした場合、その原因は何ですか?

Datetime2データ型からdatetimeデータ型への変換の結果、範囲外の値が生じました。ステートメントは終了されました。

31
Geronimo18

DateTimeの範囲は、1753年1月1日から9999年12月31日までです。

DateTime2の範囲は、0001-01-01〜9999-12-31です

したがって、1753年より前の日付を入力している場合、テーブルのフィールドがDateTime型であるときにこのエラーが発生します。

68
AnthonyWJones

Entity Frameworkは、値{01/01/0001 00:00:00}のフィールドにデフォルトの日付を追加しますが、これはSQLの日付生成の範囲外です。したがって、それを機能させるには、EFにデフォルトの日付を生成しないように要求する必要があります。そのクラスのモデルで次の操作を行うことで、NULLを許可することができます。

この場合、EntityFrameworkによってLastLoggedInフィールドのデフォルト値が生成されます。日付ベースのこのフィールドがnull値をとることができる場合、モデルで次の操作を行うことでnull値を許可できることを意味します。

 [Display(Name = "LastLoggedIn")]
        public DateTime? LastLoggedIn { get; set; }
23
Hari Gillala
Products prd = new Products();            
prd.CreatedDate = DateTime.Now;

上記のように追加できます

3
Alparslan ŞEN

このエラーは、コントローラーアクションのバインドリスト内のフィールド名のスペルが間違っている場合にも発生する可能性があります。私の状況では、日付フィールドは思ったようにバインドされていなかったため、日付はデフォルトで範囲外の日付になりました。

0
Kevin Francis