当我将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值。
我错过了什么?
答案 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.