将DateTime与SqlDateTime.MinValue进行比较

时间:2016-10-18 17:10:23

标签: c# datetime exception

当我将DateTime变量与SqlDateTime.MinValue进行比较时:

if (StartDate > SqlDateTime.MinValue)
{
  // some code
}

如果StartDate是<

我得到以下运行时异常SqlDateTime.MinValue:

  

SqlDateTime溢出。必须在1/1/1753 12:00:00 AM之间   12/31/9999 11:59:59 PM。

只需稍加改动就可以轻松解决这个问题:

if (StartDate > SqlDateTime.MinValue.Value)
{
  // some code
}

据我所知,在第一个代码片段中,我将苹果与橙子进行比较。我不明白的是异常消息。好像我正在为SqlDateTime变量分配一个DateTime值。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

.NET本机DateTime类型(具体来说,它是一种结构)包含比SqlDateTime数据类型可以支持的更广泛的可能值。更具体地说,DateTime值的范围可以从01/01/0000到理论值12/31/9999。

当编译器试图强制进行比较时,它会尝试将一个DateTime值(MinValue.Value)放在外面(在上下文之前或之前的#39;)支持的范围内。 SqlDateTime - 因此溢出。

答案 1 :(得分:0)

来自MSDN上的SqlDateTime Structure

  

SqlDateTime结构

     

表示从1753年1月1日到9999年12月31日的值的日期和时间数据,以及存储在数据库中或从数据库中检索的3.33毫秒的准确度。 SqlDateTime结构与其对应的.NET Framework类型DateTime具有不同的基础数据结构,可以表示在12:00到AM 1/1/0001和12/31/59 PM 12/31/9999之间的任何时间到精度为100纳秒。 SqlDateTime实际上存储了相对差异到00:00:00 AM 1/1/1900。因此,从“00:00:00 AM 1/1/1900”到整数的转换将返回0.