將不確定變為確定~DateTime.MinValue和MaxValue引發的異常


回到目錄

問題描述:

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