2013-05-22 162 views
7

我嘗試在我的數據庫中插入值爲null(DateTime)的字段輸入「日期」,但我總是得到一個'0001-01-01'。我不明白,這個字段「允許空值」,我不知道爲什麼我有這個默認值。爲什麼當我插入DateTime null時,我在SQL Server中有「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); 

LAST_MODIFIED_DATE鍵入System.DateTime的?所以我不知道他們爲什麼改變這個'空'。

如果我嘗試顯示在我的應用程序的價值,我得到01/01/0001 00:00:00

而且0001-01-01與SSMS

有人可以解釋我爲什麼不能得到真正的「NULL」?

問候

+4

請顯示您的代碼 –

+0

您正在將null datetime的c#值插入到sqldatetime字段中? –

+3

你打算如何插入?這很重要。很多。 –

回答

9

我認爲這是相當於零

+2

+1這是正確的!使用'DBNull.Value'插入SQL'NULL' – Andomar

+4

@Andomar這是一切都很好,但不是這個答案說什麼 –

+0

@MarcGravell:評論意味作爲附加信息。如果你運行'var d = new DateTime(); Console.WriteLine(d);',它打印'0001-01-01',這讓我不同意downvotes。 – Andomar

2

值當說你正試圖把一個空DateTime,您使用的一個Nullable<DateTime>(a.k.a DateTime?)或者乾脆DateTime?後者是值類型,其默認值是精確01/01/0001 00:00:00

+0

基於將'null'賦予什麼*推測*日期的代碼示例,我們知道它不能是'DateTime';因此'日期時間?'是最有可能的 –

+0

@NikolaDimitroff這是一個'System.DateTime的?'用的EntityFramework生成的,當我聯繫我的模型與DB,這就是爲什麼我可以給他一個「空」,但我不knwo他爲什麼將其更改爲此默認值。 – Alex

4

如果Last_Modified_DateDateTime類型的,你不能有「實空」,因爲DateTime structure - 因爲別人已經所述 - 不能爲空。所以你的示例代碼甚至不會編譯。

如果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的類型是什麼,您的代碼都不會編譯。

相關問題