Tri*_*nko 5 .net datetime type-inference datetime2 sql-server-2008
对于 .NET DateTime 类型,为什么推断的数据库类型是 SqlDbTypes.DateTime 而不是 SqlDbTypes.DateTime2?(见http://msdn.microsoft.com/en-us/library/yy6y35y8.aspx)
通过默认为不太精确的 SQL DateTime 类型,.NET 框架保证,默认情况下,您通过具有未指定 SqlDbType 的 SqlParameter 对象传递的任何 .NET DateTime 值肯定会因精度降低而损坏。这是一个糟糕的设计决定,IMO,考虑到仅仅保留全部价值不会有更糟糕的后果。
例如,我不能使用 SqlParameterCollection.AddWithValue 方法,因为在传递 DateTime 值时,该值会被截断为范围非常有限的 SQL DateTime 值。结果是:
由于 .NET DateTime 在精度和范围上最接近于 SQL Server 2008 数据类型“datetime2(7)”,为什么框架将 SqlParameter 值转换为 SQL DateTime,以及有什么方法可以更改默认行为所以我仍然可以使用类型推断功能吗?
我能看到的唯一建议是该功能已损坏,我应该始终明确指定数据类型,这将需要大量代码更改。我想如果框架只是保留 .NET DateTime 值的原始值,问题会更少。如果数据库字段类型恰好是不太精确的 SQL DateTime 类型,那么传递给查询的日期/时间字符串值将被数据库引擎截断。如果超出范围,您将如预期的那样收到错误消息。更重要的是,如果数据库字段类型是datetime2,那么一切都会顺利进行,记录也会正确匹配。
归档时间: |
|
查看次数: |
1313 次 |
最近记录: |