回到目录

问题描述:

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);

它的结果为:

aaarticlea/png;base64,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" alt="" />

所以,如果你在程序中,进行数据库查询时,需要对日期进行查询,如果希望给日期变量一个默认值,那不会使用DateTime.MinValue,而要使用SQL的数据结果中的MinValue,它位于System.Data.SqlTypes名称空间下,表示与SQLSERVER对应的数据类型,测试代码如下:

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

它的结果为:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAAmCAIAAADiASYtAAACGUlEQVR4nO2aMXLDMAwE/TQ/zU9jmTJFHuROwwg4EABhQcncVgp5PALkTcby+PHz/fV6vZ7P54OQEwwHgTAcBMJwEAjDQSAyHGOMWTA01HF1ib+SkDikR3VG9V0+bZzCIctVG1OVUm83r9oaRPWqcrnQ2e9lPp0c4UBZjobDWKtOoX039WoNciEakbPX+NyL5X+OE2qTS/Fy3HaL6o2C/Zd60l/jcy9C4Zhnx29UpWpl6JebevRIOXyZRvoun0784UhMyfFQYhLjSCnvJqrv8unEGQ67B+cqw0SdiuoN5SFWSzJG5KV+1OdepMOBOvQ8R/09eqfSeanyz2t87oX6tuK8KlssT0EtAO0b1RtU6bt82uA3pATCcBAIw0EgDAeBMBwEwnAQCMNBIHM40Mt31biNFEd9bL2/mJK+hqDXJ8PpS7B519pniezzNBvysfX+E9zvy9Z0+WToCscxNSZUgdPHXus/Ps++qNp5MHepVT41tIQDHQoq0u+T89/f95+HY65MrW9/3OjEaM9/Qw/tcJf+iJA/Wq7q7fP5kE8G9QfG/suIjn/U3JiNHl/UP+GWuNEqHy9XhsNooyRJua0L/fe7q/KpYfPHPiXJWOrRs0fv2T26ryccuXqqfGpQP3MsK06Mox6GYDmOepFiw8djYljZJrY+ZFLoE4bfkBIIw0EgDAeBMBwEwnAQCMNBIAwHgeyEI/reT/4Wb/IjdMHJbYK1AAAAAElFTkSuQmCC" alt="" />

它在程序中的体现为:

     /// 用户列表
/// </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"] = ; var specification = new UserSpecification(startTime, endTime, username, deptname);
var model = userManager.GetWebManageUsers(specification, new PageParameters(page ?? , 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类型代替!

回到目录

将不确定变为确定~DateTime.MinValue和MaxValue引发的异常的更多相关文章

  1. DateTime.MinValue和MaxValue引发的异常

    转载: http://www.cnblogs.com/lori/p/3186807.html 问题描述: SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/3 ...

  2. ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效

    ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效

  3. 滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之

    一个莫名其妙的问题:错误 滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间. 参数名:ticks.这 网上找了很多,都没有一个正 ...

  4. 在转换为 UTC 时大于 DateTime.MaxValue 或小于 DateTime.MinValue 的 DateTime 值无法系列化为 JSON

    看到这个错往往会感到莫名其妙! 其原因其实是数据库的DateTime最小值和C#的DateTime不一样 Sql Server DateTime 类型必须介于 1/1/1753 12:00:00 AM ...

  5. c#等程序中的关于时间的最大值【DateTime.MaxValue】和最小值【DateTime.MinValue】

    运行之后得到的结果 c# DateTime.MaxValue:// :: DateTime.MinValue:// :: Sql Server DateTime 类型必须介于 1/1/1753 12: ...

  6. ORACLE查询表最近更改的数据 VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE

    转自 http://blog.chinaunix.net/uid-8504518-id-3325718.html 今天开发人员问我如何快速并方便的查出一张表最近被更改的记录,这个需求很简单,由于是查最 ...

  7. 神奇的datetime和datetime,一毫秒引发的血案

    今天才发现C#的datetime和sqlserver的daetime是多么的不一样.首先最小和最大值不一样这是众所周知的,其实精度也是一大坑. 比如 DateTime.Today.AddMillise ...

  8. GSON转换成Long型变为科学计数法及时间格式转换异常的解决方案

    直接上工具类了,简单实用 public class GsonUtils { private static Gson gson = null; static { if (gson == null) { ...

  9. WPF MVVM UI分离之《交互与数据分离》 基础才是重中之重~delegate里的Invoke和BeginInvoke 将不确定变为确定系列~目录(“机器最能证明一切”) 爱上MVC3系列~全局异常处理与异常日志 基础才是重中之重~lock和monitor的区别 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 将不确定变成确定~LINQ DBML模型可以对

    WPF MVVM UI分离之<交互与数据分离>   在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架. 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下 ...

随机推荐

  1. npm ERR publish 403,nodejs发布包流程

    nodejs学习体验之发布包,发布环境如下:1:win10系统,2:已安装nodejs. 具体操作步骤如下: *编写模块 1)新建文件夹,比如:somepackage 2) 该文件夹下新建js文件,比 ...

  2. 数学工具WZgrapher

    之前说了mathGV,其实还有一个不错类似软件WZgrapher,不仅可以画函数图,还可以微积分. 截图如下:

  3. RichTextBox着色与着色不闪

    近来写的一个数据查询分析器意外的快捷,不到两晚工夫就搞定了.完成度相当的高.当然少不了关键字着色,不过着色的代码来自的网上,看了一下感觉过多的循环 //文本框改变事件 int index = this ...

  4. 转发 win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案

    win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NE ...

  5. MySql数据源配置

    1.tomcat的config/server.xml中将以下代码写到 </Host>前: <Context docBase="struts1" path=&quo ...

  6. Python学习之路--select解析

    sellect.poll.epoll三者的区别 select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后, ...

  7. 我的iOS之路2

    第一篇果然没人看呢...好吧...那就当笔记做吧...第一篇主要写的是生成了一个helloworld,可能也是和别人撞了,所以有点厌烦,连名字都改掉吧 好,开始写第二篇 之前做第一个应用程序的时候没有 ...

  8. java分布式事务

    1.现有方案 a.atomikos b.jotm 说明:spring3.0已将jotm的支持踢掉 2.使用atomikos时的pom.xml内容 <!-- 分布式事务支持-atomikos-be ...

  9. 获取edit焦点,打开和关闭软键盘

    打开: et_search.requestFocus(); et_search.setFocusable(true); et_search.setFocusableInTouchMode(true); ...

  10. 【MySQL】事务没有提交导致 锁等待Lock wait timeout exceeded异常

    异常:Lock wait timeout exceeded; try restarting transaction 解决办法:(需要数据库最高权限) 执行select * from informati ...