【问题标题】:Validating a date to be within the SqlDbType.DateTime range验证日期是否在 SqlDbType.DateTime 范围内
【发布时间】:2011-05-04 03:05:03
【问题描述】:

我想在将 System.DateTime 值作为参数添加到我的 SqlCommand 实例之前验证它。

SqlDbType 枚举的 MSDN 文档说:

日期和时间数据范围从 1753 年 1 月 1 日到 9999 年 12 月 31 日,精度为 3.33 毫秒。

为了验证值,我正在使用

public readonly DateTime SqlDateTimeMin = new DateTime(1753, 1, 1);
public readonly DateTime SqlDateTimeMax = new DateTime(9999, 12, 31);

if (value < SqlDateTimeMin || value > SqlDateTimeMax)
    // Validation check fails
else
    // Validation check succeeds

这是最好的方法吗?有没有替代硬编码这些最小值和最大值的方法?

【问题讨论】:

    标签: c# sql-server datetime ado.net sqldbtype


    【解决方案1】:
    SqlDateTime.MaxValue = 12/31/9999
    SqlDateTime.MinValue = 1/1/1753
    

    然后您的代码将显示为:

    if (value < SqlDateTime.MinValue || value > SqlDateTime.MaxValue)
    

    我认为这比 DateTime.MaxValueDateTime.MinValue 更能满足您的需求,因为 DateTime.MinValue 不是 1/1/1753,而是 1/1/0001。

    【讨论】:

      【解决方案2】:

      SqlDateTime.MinValueSqlDateTime.MaxValue 呢?

      注意:这些是 SQL 类型 min/max 而不是 .net 类型,如前 2 个答案 :-)

      【讨论】:

      • +1 - 看起来它正是 OP 正在寻找的。​​span>
      • 下午晚些时候眼睛开始坏了。我的错。
      • 为了扩展这一点,如果您需要检查常规的 DateTime(我偶然发现的),请记住 SqlDateTimes 公开了一个 Value 属性,它是一个 DateTime。
      【解决方案3】:

      我认为真正的问题是为什么您的用户输入的日期超出了这个范围?您的验证代码很好,但我建议这是用户可以输入虚假日期的 UI 中的一个更大问题。

      【讨论】:

      • 对于我们中的一些人来说,在日期中打错字很容易。或者误解了日期格式(mm/dd/yyyy 或 dd/mm/yyyy)。
      • 给他们一个日期选择器并禁用文本框。这就是我滚动的方式...... :-)
      • 古代人的生日怎么样
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2013-10-06
      • 2017-01-28
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      相关资源
      最近更新 更多