問題描述:
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類型代替!