2010-11-02 108 views
6

我想在將它作爲參數添加到我的SqlCommand實例之前驗證System.DateTime值。將日期驗證在SqlDbType.DateTime範圍內

MSDN文檔的SqlDbType枚舉說:

的日期和時間數據,值範圍從1753年1月1日至9999年12月31日的3.3​​3毫秒的精度。

要驗證的值,我使用

public readonly DateTime SqlDateTimeMin = new DateTime(1753, 1, 1); 
public readonly DateTime SqlDateTimeMax = new DateTime(9999, 12, 31); 

if (value < SqlDateTimeMin || value > SqlDateTimeMax) 
    // Validation check fails 
else 
    // Validation check succeeds 

這是最好的辦法嗎?是否有替代硬編碼這些最小值和最大值?然後

回答

19

SqlDateTime.MinValueSqlDateTime.MaxValue

注:這些都是SQL型最小值/最大值不是.NET類型像以前的2個答案:-)

+1

+1 - 看起來好像*完全* OP在尋找什麼。 – 2010-11-02 19:01:39

+0

下午晚些時候眼睛會變壞。我的錯。 – dotariel 2010-11-02 19:02:10

+0

爲了擴大這一點,如果你需要檢查一個正常的DateTime(我偶然發現的東西),請記住SqlDateTimes公開了一個Value屬性,它是一個DateTime。 – 2017-02-17 17:45:50

0
SqlDateTime.MaxValue = 12/31/9999 
SqlDateTime.MinValue = 1/1/1753 

您的代碼將改爲:

if (value < SqlDateTime.MinValue || value > SqlDateTime.MaxValue) 

我覺得這符合您的需求比DateTime.MaxValueDateTime.MinValue更好,因爲DateTime.MinValue不是1753年1月1日而是1/1/0001。

-4

我認爲真正的問題是,爲什麼是你的用戶在這個範圍之外進入的日期?你的代碼來驗證它是好的,但我建議這是一個更大的問題,在人們可以輸入虛假日期的用戶界面。

+2

對於我們中的一些人來說,很容易在約會中輸入錯字。或誤解日期格式(mm/dd/yyyy或dd/mm/yyyy)。 – DOK 2010-11-02 19:01:58

+0

給他們一個日期選擇器並禁用文本框。這就是我如何滾動...... :-) – Achilles 2010-11-02 19:26:38

+1

僅僅依靠UI級別的驗證是不夠的,因爲可以繞過(在Web應用程序中很容易)「過濾器」(缺少更好的單詞),因爲事實)。驗證(最低限度!)需要在服務器上,用戶不能觸及。 UI級別的驗證只是爲了美化用戶體驗並節省處理時間/資源。而且,這就是你應該如何滾動。 – 2016-07-21 16:35:13