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

Ale*_*lex 8 c# sql sql-server null default

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

我正在使用C#asp .net和MVC(实体框架),这是我的代码:

Budget_Synthesis newBS = new Budget_Synthesis
{
    Budget_Code = newBudgetCode,
    Last_Modified_Date = null
};
db.Budget_Synthesis.AddObject(newBS);
Run Code Online (Sandbox Code Playgroud)

Last_Modified_Date是否输入System.DateTime?所以我不知道为什么他们改变这个'null'.

如果我尝试在我的应用程序上显示值,我会得到 01/01/0001 00:00:00

0001-01-01使用SSMS

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

最好的祝福

小智 10

我认为这是与null对应的值

  • @Andomar这一切都很好,但这不是这个答案所说的 (4认同)
  • +1那是对的!使用`DBNull.Value`插入一个SQL`NULL` (2认同)

Spa*_*man 5

如果Last_Modified_Date是 type DateTime,你不能有“真正的空”,因为DateTime 结构- 正如其他人已经说过的 - 不可为空。所以你的示例代码甚至不会编译。

如果Last_Modified_DateDateTime?( Nullable<DateTime>)类型,您的代码是正确的,但是 - 正如@Nikola Dimitroff 在他的回答中所说 - 您的数据库中不能有“真正的空”,因为默认值为DateTime?01/01/0001 00:00:00 .

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