为什么当我插入DateTime null时我在SQL Server中有“0001-01-01”?

我尝试在我的数据库中为字段类型’date’插入值null(DateTime),但我总是得到‘0001-01-01’ 。 我不明白,这个字段“允许空值”,我不知道为什么我有这个默认值。

我正在使用C#asp .net和MVC(entity framework),这是我的代码:

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与SSMS

有人可以解释为什么我不能得到一个真正的’NULL’?

最好的祝福

我认为这是与null对应的值

如果Last_Modified_Date的类型为DateTime ,则不能有“真正的空”,因为DateTime结构 – 正如其他人已经说过的那样 – 不可为空。 所以你的示例代码甚至都不会编译。

如果Last_Modified_Date的类型是DateTime?Nullable )你的代码是正确的,但是 – @Nikola Dimitroff在他的回答中说 – 你的数据库中不能有“真正的空”,因为DateTime?的默认值DateTime? 是01/01/0001 00:00:00。

您正在寻找的“真正的空”是DBNull.Value ,但您只能将其用于System.DBNull类型; 如果你指定Last_Modified_Date = DBNull.Value ,无论Last_Modified_Date的类型是Last_Modified_Date ,你的代码都不会编译。

在说你试图放置一个null DateTime ,你使用的是Nullable (又名DateTime? )还是只是DateTime ? 后者是值类型,其默认值正好是01/01/0001 00:00:00