zoukankan      html  css  js  c++  java
  • 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值

    在ASP.NET MVC 使用 EF Code First 添加数据时遇到 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值 的问题,检查了下数据表并没有设置为datetime2 数据类型的字段

    最后设断点调试才发现问题所在,有一个datetime类型的字段设为了不可为空,code  first的实体类中是以DateTime为数据类型,默认值为0001-01-01 00:00:00.000,所以才会提示超出了范围

    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 数据类型的转换产生一个超出范围的值”这个错误的原因。

    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()。

    最简单的解决办法就是,给字段设置一个大于1753 年 1 月 1 日的初始值

    参考链接: https://www.cnblogs.com/war-hzl/p/9239266.html

  • 相关阅读:
    Android 源码阅读之MMS细读TransactionService.java
    [Java2 入门经典]第16章 线程
    Android 源码阅读之建立3G网络流程
    从架构上看Android多媒体播放器
    Android 开发日志之仿三星Launcher
    非常适合OA系统的菜单
    模拟动网当前位置下拉菜单
    模拟windows菜单选项卡效果
    TreeView的各种操作
    ASCII表
  • 原文地址:https://www.cnblogs.com/runningRain/p/13702800.html
Copyright © 2011-2022 走看看