2009-11-06 56 views
3

這很奇怪,讓我很頭疼。我查看了我的代碼,但沒有看到導致它的任何邏輯錯誤。1/1/0001 12:00:00 AM不更新SQL 2008日期字段

任何其他日期設置爲我的birthDate日期時間變量在我的課程作品時,我將它添加爲我的conn.AddParam中的值,但是當我發送回1/1/0001 12:00:00 AM(已發送將其設置爲MINVALUE)到SQL 2008的日期字段,它仍然是我已經在DATABSE該字段設置爲null默認:

conn.AddParam("@birthDate", birthDate); 

生日是DateTime類型。它設置爲DateTime.MinValue;我不明白爲什麼它不會採取這個。

回答

4

我可能不理解的問題,但我相信1753年1月1日是SQL Server支持的最早日期。

Source

+0

我會假設你typoed 1753 – Powerlord 2009-11-06 17:49:22

+0

的海報說,他使用SQL 2008這早在0001-01-01支持日期的日期數據類型(http://technet.microsoft.com/en -us/library/bb630352.aspx) – TLiebe 2009-11-06 17:50:14

+0

@R。 Bemrose:固定。謝謝。 – theycallmemorty 2009-11-06 17:51:35

0

只是一個猜測回去,但它可能通過鑄造問題引起的。由於您的birthDate變量具有時間組件(上午12:00),因此SQL可能會在插入日期字段之前將其轉換爲DateTime。由於1/1/0001是無效的SQL DateTime,因此可能會有問題。嘗試將您的@birthDate參數設置爲birthDate.Date。

0

在SQL Server 2008:

日期數據類型: - 將允許你只存儲日期(YYYY-MM-DD),並通過9999-12-31.Its準確範圍0001-01-01 1天

時間數據類型:它存儲在格式HH:MM:SS:NNNNNNN,與範圍00:00:00.0000000至23:59:59:9999999和精確到100納秒

DATETIME2:格式是YYYY-MM_DD HH:MM:SS:nnnnnnnm與一系列0001-01-01 00:00:00.0000000通過999-12-31:59 9999999,精度爲100納米秒

DateTimeOffset:它包含追蹤時區的附加信息。格式爲YYYY-MM-DD hh:mm:ss [.nnnnnnn] [+/-] hh:mm,範圍爲0001-01-01 00 :00:00.000000至9999-12-31 23:59:50.9999999.storage 8yo 10字節。

0

DateTime是一個值類型。因此,如果一個DateTime變量沒有被賦值,它的值就會是默認的DateTime.MinValue值。這就是爲什麼當你明確地將你的birthDate設置爲DateTime.MinValue時,它被視爲完全沒有被賦值(例如作爲null),因此被存儲過程中該參數的默認值所取代。