web-dev-qa-db-ja.com

DateTime nullを挿入すると、SQL Serverに「0001-01-01」が含まれるのはなぜですか?

'date'と入力されたフィールドの値null(DateTime)をデータベースに挿入しようとしましたが、常に'0001-01-01'を取得します。このフィールドは「nullを許可する」ので、なぜこのデフォルト値があるのか​​わかりません。

私はMVC(Entity Framework)でC#asp .netを使用しています、これは私のコードです:

Budget_Synthesis newBS = new Budget_Synthesis
{
    Budget_Code = newBudgetCode,
    Last_Modified_Date = null
};
db.Budget_Synthesis.AddObject(newBS);

Last_Modified_DateはSystem.DateTimeと入力されますか?だから私は彼らがこの「null」を変更する理由がわかりません。

アプリケーションに値を表示しようとすると、01/01/0001 00:00:00が表示されます。

そして0001-01-01 with SSMS

誰かが私に本当の「NULL」を取得できない理由を説明できますか?

宜しくお願いします

8
Alex

これはnullに対応する値だと思います

10
Hugo Pedrosa

Last_Modified_Dateの型がDateTimeの場合、 DateTime構造 -他の人がすでに述べたように-はnull許容ではないため、「実際のnull」にすることはできません。したがって、サンプルコードはコンパイルされません。

Last_Modified_DateのタイプがDateTime?Nullable<DateTime>)の場合、コードは正しいですが、@ Nikola Dimitroffが回答で述べたように、データベースに「実際のnull」を含めることはできません。 DateTime?のデフォルト値は01/01/000100:00:00です。

探している「実際のnull」はDBNull.Valueですが、これは System.DBNull type;にのみ使用できます。 Last_Modified_Date = DBNull.Valueを割り当てると、Last_Modified_Dateのタイプが何であれ、コードはコンパイルされません。

4
Spaceman

Null DateTimeを入れようとしていると言うとき、Nullable<DateTime>(別名DateTime?)を使用していますか、それとも単にDateTimeを使用していますか?後者は値型であり、そのデフォルト値は正確に01/01/0001 00:00:00です。

2