回到目录

问题描述:

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. 【CMD】日常总结

    命令脚本可以提升工作效率,之前用过也写过一些脚本,但时间一长就忘记了.写篇随笔记录一下,随用随记哈. 调用程序 //切换到某个路径下 cd D:\Glodon\GDW\GDW\Release\Bin ...

  2. C语言小练习四

    题目要求:输入N个数,输出该数列中第k个最大者. 程序源码: #include <stdio.h> #include <string.h> void printResult(i ...

  3. PHP使用XHProf进行性能分析

    1. 编译安装 wget http://pecl.php.net/get/xhprof-0.9.3.tgz tar zxvf xhprof-0.9.3.tgz cd xhprof-0.9.3/exte ...

  4. 关于libsvm工具箱在64位matlab下的安装说明

    LIBSVM工具箱的安装 基本方法: 1.在网上下载LIBSVM工具箱. http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 2.将LIBSVM工具箱所在目录添加到MA ...

  5. 安卓开发:DateUtils

    public class DateUtils{ /** * 显示友好时间 * * @param ms * @return */ public static String getTimeDes(long ...

  6. vc中获取磁盘IO统计计数

    想知道进程读写磁盘的情况,可以获取当前进程或指定进程的IO计数. #include <Windows.h> int get_io_bytes(ULONGLONG * read_bytes, ...

  7. android开发中在界面上实现曲线图的几个开源项目

    转自:https://wapiknow.baidu.com/question/1959128379041474620?qq-pf-to=pcqq.c2c 几个相关开源项目: 1.  MPAndroid ...

  8. JSF中使用jquery拦截ajax请求

    jsf提供一个内置的jsf.ajax.request方法给我们使用,如果在jquery中使用,则需要做一些更改.  此处因为使用jquery,所以可以不必在控件中添加onclick方法了,可以给控件配 ...

  9. 多语言配置--LogisticsPlatform物流平台系统

    先看:LanguageProvider.cs   中几个主要方法 1.读取默认语言 附user.ini文件: 2.获取语言类型 附LanguageType.xml 3.读取语言资源 附:   看ILa ...

  10. 形参是ofstream

    今天写了一段代码报错 void GetEigenvalue(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud, vector<int> ...