将不确定变为确定~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类型代替!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:将不确定变为确定~DateTime.MinValue和MaxValue引发的异常,如需转载请自行联系原博主。

时间: 2024-10-18 01:47:53

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

将不确定变为确定系列~目录(“机器最能证明一切”)

本系列文章主要是我在工作中,遇到一些不能主观判断的问题,最后在电脑上去证明我的理解是否正确,这也是题目"将不确定变成确定"的由来. 记得我在上大学时,老师说过一句话:"机器最能证明一切",这句话现在看来,确实很经典. 将不确定变为确定系列~目录("机器最能证明一切") 第一回 将不确定变成确定~类中的override 第二回 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 第三回 将不确定变成确定~frameset页面不

如何使用SQL生成DateTime.Ticks

在项目中我需要使用到一个随机数(Random Number),该随机数将作为 Hashtable 中的 Key 用于唯一索引数据,所以需要保持单机唯一性. 同时该随机数还需要具备可排序性以便对数据进行排序. 此时,我可以考虑使用随机字符串<C#生成MongoDB中的ObjectId>,这里的 ObjectId 具备单机唯一性和可排序性. 但另一个需求是,我需要该随机数为 int 或 long 类型,以便与依赖的 Service 进行通信,部分取代 TransactionId 或 Token 的

谈谈你最熟悉的System.DateTime[上篇]

最近一直在负责公司内部框架的升级工作,今天对一个小问题进行了重新思考--时间的处理.具体来说,是如何有效地进行时间的处理以提供对跨时区的支持.对于一个分布式的应用来说,倘若客户端和服务端部署与不同的地区,在对时间进行处理的时候,就需要考虑时区的问题.以我们现在的一个项目为例,这是一个为澳大利亚某机构开发的一个基于Smart Client应用(Windows Form客户端),服务器部署于墨尔本,应用的最终用户可能需要跨越不同的州.澳洲地广人稀,不同的州也有可能会跨越不同的时区.假设数据库并不支持

c#-C# DateTime的使用,求教!!

问题描述 C# DateTime的使用,求教!! 2C 我的数据表格中有一列时间为18:28:06,然后我用string类型读取时间,我想将该string放入DateTime类型的变量中,请问需要怎样做?我的代码是:DateTime dt=Convert.ToDateTime(time)time是string类型.但这样做不对,求教!!谢谢!! 解决方案 string time=str[1]+"" ""+str[2];// """&qu

一起谈.NET技术,System.DateTime详解

最近一直在负责公司内部框架的升级工作,今天对一个小问题进行了重新思考--时间的处理.具体来说,是如何有效地进行时间的处理以提供对跨时区的支持.对于一个分布式的应用来说,倘若客户端和服务端部署与不同的地区,在对时间进行处理的时候,就需要考虑时区的问题.以我们现在的一个项目为例,这是一个为澳大利亚某机构开发的一个基于Smart Client应用(Windows Form客户端),服务器部署于墨尔本,应用的最终用户可能需要跨越不同的州.澳洲地广人稀,不同的州也有可能会跨越不同的时区.假设数据库并不支持

SQL Server 2005、2008 的 datetime 值范围(转)

SQL Server 2005.2008 的 datetime 最小值是:1753-01-01 00:00:00 最大值是:9999-12-31 23:59:59.997 这与 .NET 中的 DateTime.MinValue.DateTime.MaxValue 不匹配,与 System.Data.SqlTypes.SqlDateTime.MinValue.System.Data.SqlTypes.SqlDateTime.MaxValue 匹配. 其实 .NET 与 SQL Server 字段

System.DateTime详解

最近一直在负责公司内部框架的升级工作,今天对一个小问题进行了重新思考--时间的处理.具体来说,是如何有效地进行时间的处理以提供对跨时区的支持.对于一个分布式的应用来说,倘若客户端和服务端部署与不同的地区,在对时间进行处理的时候,就需要考虑时区的问题.以我们现在的一个项目为例,这是一个为澳大利亚某机构开发的一个基于Smart Client应用(Windows Form客户端),服务器部署于墨尔本,应用的最终用户可能需要跨越不同的州.澳洲地广人稀,不同的州也有可能会跨越不同的时区.假设数据库并不支持

终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了

前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说过  这么多年 秋天有两点没变 一是还是单身 另外一个就是cyq.data还没开源  终于等到开源了! 也许吧,只有把cyq.data最终开源了,才能解决单身问题,不然我在这上面花的时间太多,都没时间和妹子聊天了.   几个重要网址: 源码SVN地址:https://github.com/cyq11

为什么编程语言以及数据库要从1970年1月1日开始计算时

今天一时兴起想起了在SQL Server中使用DateTime.MinValue插入时间时报错的问题,原因就在于数据库的最小时间和.Net里的最小时间不一致导致的,网上查阅了些资料,找到如下结果 Net Framewrok 中, DateTime.MinValue           => 0001/01/01 00:00:00 SqlDateTime.MinValue.Value  => 1753/01/01 00:00:00   SQL Server 2005 中, DateTime 最小