DateTime.MinValue和MaxValue引發的異常


轉載: http://www.cnblogs.com/lori/p/3186807.html

問題描述:

SqlDateTime 溢出。必須介於 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之間

概念相關

.Net中的DateTime結構類中的MinValue和MaxValue有時會引發一個異常,那就是日期溢出的問題,您輸入的日期必須介於 1753 年 1 月 1 日到 9999 年 12 月 31 日之間,而DateTime.MinValue實際上不是1753 年 1 月 1日,而是0000年1月1日,而數據庫可以接收的日期時間最小值為1753/1/1,這時由於.net產生的DateTime.MinValue遠遠小 於它,所以,它出現了日期溢出的問題。

解決問題

我們作一個測試:

   Console.Write(DateTime.MinValue);
    Console.Write(DateTime.MaxValue);

它的結果為:

所以,如果你在程序中,進行數據庫查詢時,需要對日期進行查詢,如果希望給日期變量一個默認值,那不會使用DateTime.MinValue,而 要使用SQL的數據結果中的MinValue,它位於System.Data.SqlTypes名稱空間下,表示與SQLSERVER對應的數據類型,測 試代碼如下:

 Console.WriteLine(System.Data.SqlTypes.SqlDateTime.MinValue);
 Console.WriteLine(System.Data.SqlTypes.SqlDateTime.MaxValue);

它的結果為:

它在程序中的體現為:

復制代碼
     /// 用戶列表 /// </summary> /// <param name="username"></param> /// <param name="deptname"></param> /// <param name="page"></param> /// <returns></returns> public ActionResult Index( string username, string deptname, DateTime? startTime, DateTime? endTime, int? page) { UserManager userManager = new UserManager(); ViewData["SiteMapID"] = 11; var specification = new UserSpecification(startTime, endTime, username, deptname); var model = userManager.GetWebManageUsers(specification, new PageParameters(page ?? 1, base.PageSize)); model.AddParameters = new System.Collections.Specialized.NameValueCollection(); model.AddParameters.Add("username", username); model.AddParameters.Add("deptname", deptname); model.AddParameters.Add("startTime", (startTime).ToString()); model.AddParameters.Add("endTime", (endTime).ToString()); if (Request.IsAjaxRequest()) return PartialView("List", model); return View(model); }
復制代碼

在上面的代碼中,我們的DateTime類型,由於與數據庫查詢相關,所以,可以使用SqlDateTime類型代替!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM