最近在ASP.NET MVC中遇到一个问题,如题,在使用EF数据模型的时候,要去添加一条新的数据到Sqlserver数据库,在之前项目中并没有出现该异常,所以去扒了扒demo,发现有几个字段(数据库类型为datetime)savechange的时候默认绑定了datetime.now。问题就在这里,我的新项目并没有给定这几个字段的数据。下面总结下:

触发该错误的条件如下:

  1. SQL Server数据库版本中的字段类型为datetime2
  2. 数据库中,某个要进行Add或者Edit的字段的数据类型为datetime,比如表A中的today字段,类型为datetime。而后台代码进行数据库操作时,并没有给today(datetime类型)赋值。结果就是VS2015编译的时候默认将其类型编译为datetime2,导致用EF进行add和edit操作的时候出现该异常。

解决方案:

  1. 给这些字段一个值(不管它是否在数据库设置了默认值),并且日期要大于1753年1月1日,这是最简单的方法。
  2. 将数据库类型修改为datetime?类型,也就是说允许为空。
  3. 修改数据库字段类型为datetime2类型,前提是数据库要支持该类型。
  4. 在C#中用new DateTime(year,month,day,hour,minute,second)来限制精度,原因之后会在datetime2和datetime的区别中提到。
  5. 这个方法不太推荐,将model的edmx中的providerManifestToken设置成2005,这样ef就默认转化成datetime。

datetime2和datetime的区别:

官方MSDN对于datetime2的说明:定义结合了 24 小时制时间的日期。 可将 datetime2 视作现有 datetime 类型的扩展,其数据范围更大,默认的小数精度更高,并具有可选的用户定义的精度。

这里值的注意的是datetime2的日期范围是"0001-01-01 到 9999-12-31"(公元元年 1 月 1 日到公元 9999 年 12 月 31 日)。

而datetime的日期范围是:”1753 年 1 月 1 日到 9999 年 12 月 31 日“。这里的日期范围就是造成“从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值”这个错误的原因。

?
1
2
3
4
5
DateTime字段类型对应的时间格式是yyyy-MM-dd HH:mm:ss.fff,3个f,精确到1毫秒(ms),示例2014-12-0317:06:15.433。
DateTime2字段类型对应的时间格式是yyyy-MM-dd HH:mm:ss.fffffff,7个f,精确到0.1微秒(μs),示例2014-12-0317:23:19.2880929。
如果用SQL的日期函数进行赋值,DateTime字段类型要用GETDATE(),DateTime2字段类型要用SYSDATETIME()。

从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值相关推荐

  1. 从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值报错处理?

    应该是varchar里面的时间范围超出了datetime类型的范围,建议使用baidatetime2,. 背景知识: SQL Server 2008除了DateTime和SmallDateTime之外 ...

  2. [Err] 22007 - [SQL Server]从 nvarchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。

    报错语句: cast(Replace(Replace(P.DeliverDate,'.','-'),'/','-') as datetime) 改为 cast(Replace(Replace(P.De ...

  3. 从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界解决方案

    最近同事给一客户部署系统,最早跟我说过,时间的问题,说是显示英文日期和时间,第一反映是区域和语言那里的设置有问题,问题方法,N久后偶去客户那,竟然还是以前的问题,郁闷,回来在公司可怎么也没有试出来,倒 ...

  4. SQL DateTime数据类型注意事项和限制

    介绍 (Introduction) In this article, we will explorethe SQL Date Time data type and its limitations. 在 ...

  5. 如何仅从SQL Server DateTime数据类型返回日期

    SELECT GETDATE() 回报: 2008-09-22 15:24:13.790 我希望该日期部分没有时间部分: 2008-09-22 00:00:00.000 我该怎么办? #1楼 尝试这个 ...

  6. datetime数据类型_系统数据类型

    1.整数型 1. 整数型数据由负整数或正整数组成,如-15. 0.5和2509. 整数型数据使用bigint.int, smallint和tinyint数据类型存储.各种类型能存储的数值的范围如下: ...

  7. datetime数据类型_当pandas遇上数据类型问题

    原文:Overview of Pandas Data Types作者:Chris Moffitt链接: https://pbpython.com/pandas_dtypes.html译者: 大邓 当我 ...

  8. 揭密SQL Server DATETIME数据类型

    看完这篇文章的第一感觉是,虽然对于日期类型数据使用得很算顺利,不过作者 提到的一些东西还真不知道.有时候在应用上,不觉得比老外差到那里去.但是, 老外的一个优良习惯细扣概念并进行实证检验:而我们的习惯 ...

  9. 【转贴】揭密SQL Server DATETIME数据类型

    原文出处:http://blog.csdn.net/zk911/archive/2005/11/23/535432.aspx 作者:zk911 看完这篇文章的第一感觉是,虽然对于日期类型数据使用得很算 ...

最新文章

  1. Coding-字符串
  2. 猜拳游戏c语言代码流程图,这是一个猜拳游戏的程序 大家有更好的解决方法么?...
  3. select case when if 的一些用法
  4. linux共享数据,使用Linux共享数据对象
  5. 快速入门:github发布windows版
  6. 【Flink】FLink Assigned key must not be null
  7. 【UV打印机】PrintExp打印软件教程(七)-高级模式(其它)
  8. internet信息服务器管理器,细述Win10系统上开启internet信息服务(iis)管理器的操作步骤...
  9. 苹果电脑重装系统步骤
  10. @submit.native.prevent的作用?
  11. cocos2dx android工程接入联通Unipay sdk
  12. Thingworx自定义扩展开发(二)- Widget Demo Coding
  13. JAVA企业面试题精选 数据库31-40
  14. PS制作可爱的花豹头像
  15. php 环信easyui_php集成环信IM即时通讯系统(大致流程方法)
  16. python笛卡尔坐标系_python – n球面坐标系到笛卡尔坐标系
  17. 基于 C# 和 js 开发的程序员升职记 remake 版
  18. TCP/IP 应用层常用协议
  19. 计算机视觉资源汇总 - Part I
  20. 计算机上应用锁,电脑应用锁

热门文章

  1. Android自定义View全解
  2. KafkaProducer初始化时,是否会拉取集群元数据?
  3. 【Java基础】异常
  4. android 自定义span_Android自定义可点击的ImageSpan并在TextView中内置View
  5. python 如何封装dll_如何为DLL库创建Python包装器
  6. solr多core的处理
  7. commons-beanutils的使用
  8. Remove Trovi Search from Apple Mac OS X
  9. (七十九)MapKit的基本使用
  10. 企业部署Windows 8 Store 风格应用