2010-02-03 64 views
49

在將.NET DateTime(當是默認(DateTime))轉換爲SqlDateTime時,我應該始終檢查.NET日期是否在SqlDateTime.MinValue和SqlDateTime.MaxValue之間[或者]是否有一個好方法去做這個。NET DateTime到SqlDateTime轉換

+50

@JohnSaunders:是啊,這是有點挑剔。 – Will

回答

90

日期實際上可能超出該範圍嗎?它來自用戶輸入嗎?如果對這些問題中的任何一個的答案都是肯定的,那麼你應該經常檢查 - 否則你會讓應用程序容易出錯。

您可以格式化你的入選日在SQL語句相當容易:

var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss"); 
+0

@Winston:是的,我的傳入日期可能爲空。 – Sreedhar

+15

@Winston:您*不應*將日期格式化爲包含在SQL語句中的字符串。改爲使用帶有強類型參數的參數化SQL。 – LukeH

+5

我同意盧克。如果你出生在當月「桌子」的「用戶」,在「下降」年份? (嚴肅地說,按照Luke的說法) –

2

如果你檢查的DBNull,轉換SQL日期時間爲.NET日期時間不應該是一個問題。但是,您可能會遇到將.NET DateTime轉換爲有效的SQL DateTime的問題。

SQL Server無法識別1753年1月1日之前的日期。那是英格蘭採用格里曆的那一年。通常檢查DateTime.MinValue是足夠的,但如果您懷疑數據可能在18世紀之前有數年,則需要進行另一次檢查或使用不同的數據類型。 (我經常想知道博物館在他們的數據庫中使用什麼)

檢查最大日期並不是必須的,SQL Server和.NET DateTime都有一個最大日期爲12/31/9999它可能是一個有效的業務規則,但它不會造成問題。

1

,我偶然在這裏,只是擊中回寄我已經找到了...用EF4時

,「一個sql的」 datetime列可以從充滿.NET的DateTime使用BitConverter。

EntitieObj.thetime = BitConverter.GetBytes(DateTime.Now.ToBinary()); 

也Fakrudeen的鏈接給我進一步......謝謝。

0

- 要比較只有日期部分,你可以這樣做:

var result = db.query($"SELECT * FROM table WHERE date >= '{fromDate.ToString("yyyy-MM-dd")}' and date <= '{toDate.ToString("yyyy-MM-dd"}'");