DateTime.MinValue和MaxValue引发的异常
转载: http://www.cnblogs.com/lori/p/3186807.html
问题描述:
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"] = 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引发的异常的更多相关文章
- 将不确定变为确定~DateTime.MinValue和MaxValue引发的异常
回到目录 问题描述: SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间 概念相关 .Net中的DateTime结 ...
- 滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之
一个莫名其妙的问题:错误 滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间. 参数名:ticks.这 网上找了很多,都没有一个正 ...
- c#等程序中的关于时间的最大值【DateTime.MaxValue】和最小值【DateTime.MinValue】
运行之后得到的结果 c# DateTime.MaxValue:// :: DateTime.MinValue:// :: Sql Server DateTime 类型必须介于 1/1/1753 12: ...
- 在转换为 UTC 时大于 DateTime.MaxValue 或小于 DateTime.MinValue 的 DateTime 值无法系列化为 JSON
看到这个错往往会感到莫名其妙! 其原因其实是数据库的DateTime最小值和C#的DateTime不一样 Sql Server DateTime 类型必须介于 1/1/1753 12:00:00 AM ...
- 选择目录,选择文件夹的COM组件问题。在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常。
异常: 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的 Main 函数带有 STAThreadAttribute 标记. 只有将调试器附加到该进程才会引发此异常. ...
- ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效
ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效
- WPF控件ComboBox 每个Item的ToolTip引发的异常
介绍 首先介绍下要实现的任务.做一个下拉框,当选择每个项的时候将鼠标发在上面显示该项的ToolTip的内容(Image). 实现 Model: public class SkinInfo : Noti ...
- VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决
VS2010 F5调试时出现 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常 两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上.2) 打开项目属性,选择调试选 ...
- WPF关于“在“System.Windows.Markup.StaticResourceHolder”上提供值时引发了异常。”问题解决办法
在WPF中添加样式,在MainWindow.xaml使用自定义按钮FButton时报错,报错信息如下: "System.Windows.Markup.XamlParseException&q ...
随机推荐
- poj 1845 Sumdiv(约数和,乘法逆元)
题目: 求AB的正约数之和. 输入: A,B(0<=A,B<=5*107) 输出: 一个整数,AB的正约数之和 mod 9901. 思路: 根据正整数唯一分解定理,若一个正整数表示为:A= ...
- ACM学习历程—HDU4746 Mophues(莫比乌斯)
Description As we know, any positive integer C ( C >= 2 ) can be written as the multiply of some ...
- arguments对象的实例使用
新年第一记,从这里开始,先来个简单的!去年的知识梳理留下了很多尾巴,原因有很多(知识储量不足,懒了,项目多...) lg:都是借口~ 好吧,我承认,这都是借口,今年一定把尾巴清干净! 下面要写的是 ...
- 用VBA计算两个日期之间的工作日(去掉周末两天)
最近公司HR和Finance想算员工的工作天数,想让我帮忙写些VBA,自己从网上找了下代码,自己再改改,以下来自网络. 计算两个日期之间的工作日,用VBA,因量大,最好用数组做 Sub kk() Di ...
- VBA记录当前系统时间并精确到毫秒
想做个功能,点一次按钮,就在A1记录一次当前系统时间,要精确到毫秒的.再点一次按钮就在A2显示,以此类推! 例如:这个功能可以用来做歌词记时间! Sub ttt() ActiveCell.Select ...
- jquery--find与children方法的区别
children方法: find方法: 通过以上的解释,可以总结如下: 1:children及find方法都用是用来获得element的子elements的,两者都不会返回 text node,就 ...
- Centos6.5命令行快捷键
ctrl+a打开一个新的终端 ctrl+l 清除屏幕内容 ctrl+a 切换到命令行开始ctrl+e 切换到命令行末尾ctrl+u 剪切光标之前的内容ctrl+k 剪切光标之后的内容 Ctrl+-&g ...
- 创建Azure Blob Snapshot的脚本
在前面的文章中介绍了如何创建Azure Blob Snapshot.那篇文章中创建的脚本思路是:遍历所有Storage Account,找到所有vhd文件,进行Snapshot的创建. 但这种方式不够 ...
- 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常
目录(?)[-] SOAP JSON和XMLPullParser Exception处理 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog. ...
- js提交数据时需判断是点击事件还是回车键
使用回车键实质还是点击事件==回车时将焦点聚居在某个标签上. Html代码: <div id="btlogin" class="btlogin">& ...