zoukankan      html  css  js  c++  java
  • SmallDateTime时间范围检查

    SamllDataTime是SQL Server中的一种表达时间的类型, 精度不高但是省空间,具体的细节就查看一下MSDN的文档吧. http://msdn.microsoft.com/zh-cn/library/ms182418.aspx

    这里着重看一下它的时间范围从1900-01-01 到 2079-06-06.

    首先展示一段系统中的代码, 你能发现其中的问题么?

    SqlCommand command = new SqlCommand(sqlTemplate, conn);
    //....
    command.Parameters.Add(new SqlParameter("@LogClientTime", SqlDbType.SmallDate;
    command.Parameters.Add(new SqlParameter("@LogServerTime", SqlDbType.SmallDate;
    //....
    foreach (var hourlySummaryData in _summaryData)
    {
        //....
        command.Parameters["@LogClientTime"].Value = 
        hourlySummaryData.LogClientTime < SqlDateTime.MinValue ? SqlDateTime.MinValue : hourlySumma.Value.LogClientTime;
        command.Parameters["@LogServerTime"].Value = 
        hourlySummaryData.LogServerTime < SqlDateTime.MinValue ? SqlDateTime.MinValue : hourlySumma.Value.LogServerTime;
        //....
        command.ExecuteNonQuery();
    }

    系统中的时间未检查hourlySummaryData.LogClientTime的上限是不, 的确是个bug. 但是这不是我想说,这里还有一个bug.

    SqlDateTime.MinValue的值是1753/1/1 0:00:00. 知道问题出在哪里了吧. 

    .NET BCL中并没有任何一个公共静态字段时间是1900/1/1 (私有的还是有的, 比如SqlDateTime中的SQLBaseDate字段.)

    所以使用的时候一定要特别的注意, 如果数据库中使用了SmallDateTime那么范围检查一定要自己手写一下. SqlDateTime.MinValue跟MaxValue不是给SmallDateTime用的, 是datetime的范围检查(1753 年 1 月 1 日到 9999 年 12 月 31 日).

  • 相关阅读:
    第10组 团队展示
    第一次结对编程作业
    13.Vue.js 组件
    12.Vue.js 表单
    11.Vue.js-事件处理器
    10.Vue.js 样式绑定
    9.Vue.js 监听属性
    8.Vue.js-计算属性
    7.循环语句
    6.Vue.js-条件与循环
  • 原文地址:https://www.cnblogs.com/cuiweifu/p/3786462.html
Copyright © 2011-2022 走看看