您的位置:首页 > 产品设计 > 产品经理

SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之间---解决办法

2010-12-08 19:11 357 查看
原因:
传给数据库的时间类型的值为NULL,或者为DateTime.MinValue
这里的NULL指的是程序代码里面的null,大多数出现这种情况的情景是:在程序里面定义了一个时间类型的变量,没有给赋值,就传给数据库(或存储过程了)。这时这个变量的值默认是赋成了01年01月01日。
测试以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

//导入SqlDateTime的命名空间
using System.Data.SqlTypes;

namespace ConsoleApplication5
{
class Program
{

static void Main(string[] args)
{
Console.WriteLine(DateTime.MinValue.ToString());
Console.WriteLine(DateTime.MaxValue.ToString());

Console.WriteLine(SqlDateTime.MinValue.ToString());
Console.WriteLine(SqlDateTime.MaxValue.ToSqlString());
}
}
}

输出:
0001-1-1 0:00:00
9999-12-31 23:59:59
1753-1-1 0:00:00
9999-12-31 23:59:59
.NET中 DateTime最小值为: 0001-1-1 0:00:00
数据库中DateTime最小值为: 1753-1-1 0:00:00,
显然.NET中的最小值超出了Sql最小值的最小范围,导致数据溢出的错误。最大值都一样

解决方法:
1、 对日期字段,没赋值的地方或用DateTime.MinValue的地方都换为,SqlDateTime.MinValue
2、 定义一个不程序中不可能用的最小值常量,对日期字段,没赋值的地方或用DateTime.MinValue的地方用此常量

public class DateTimeConst
{
/// <summary>
/// 无效时间(缺省时间)
/// </summary>
public static readonly DateTime INVALID_DATETIME = new DateTime(1900, 1, 1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐