將不確(que)定(ding)變為確(que)定(ding)~DateTime.MinValue和MaxValue引發的異常
問題描述:
SqlDateTime 溢出。必須(xu)介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之間
概念相關
.Net中的(de)(de)(de)DateTime結構類(lei)中的(de)(de)(de)MinValue和(he)MaxValue有時(shi)(shi)會引發一(yi)個異(yi)常,那(nei)就是(shi)日期(qi)溢出(chu)的(de)(de)(de)問題,您(nin)輸入的(de)(de)(de)日期(qi)必(bi)須介(jie)于(yu)(yu) 1753 年(nian) 1 月(yue) 1 日到(dao) 9999 年(nian) 12 月(yue) 31 日之間(jian),而(er)DateTime.MinValue實際上(shang)不是(shi)1753 年(nian) 1 月(yue) 1日,而(er)是(shi)0000年(nian)1月(yue)1日,而(er)數據庫可以接(jie)收的(de)(de)(de)日期(qi)時(shi)(shi)間(jian)最(zui)小值為1753/1/1,這時(shi)(shi)由于(yu)(yu).net產生的(de)(de)(de)DateTime.MinValue遠遠小于(yu)(yu)它,所以,它出(chu)現了日期(qi)溢出(chu)的(de)(de)(de)問題。
解決問題
我們作一個測試:
Console.Write(DateTime.MinValue);
Console.Write(DateTime.MaxValue);
它的結果為:
所以,如果(guo)你在程(cheng)序中,進(jin)行數(shu)據庫(ku)查詢時,需(xu)要(yao)對(dui)日(ri)期(qi)進(jin)行查詢,如果(guo)希望給日(ri)期(qi)變量一個默認值,那不會使用DateTime.MinValue,而(er)要(yao)使用SQL的數(shu)據結(jie)果(guo)中的MinValue,它位于System.Data.SqlTypes名稱空間下(xia),表(biao)示與SQLSERVER對(dui)應的數(shu)據類型,測試代碼(ma)如下(xia):
Console.WriteLine(System.Data.SqlTypes.SqlDateTime.MinValue);
Console.WriteLine(System.Data.SqlTypes.SqlDateTime.MaxValue);
它的結果為:
它在程序(xu)中(zhong)的體現為:
/// 用戶列表 /// </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); }
在上面(mian)的(de)代碼中,我們(men)的(de)DateTime類(lei)(lei)型,由于與數據(ju)庫查詢(xun)相關,所以,可以使用SqlDateTime類(lei)(lei)型代替!