gpt4 book ai didi

.net - 对于 .NET DateTime 类型,为什么推断的数据库类型是 SqlDbTypes.DateTime 而不是 SqlDbTypes.DateTime2?

转载 作者:行者123 更新时间:2023-12-02 04:04:29 26 4
gpt4 key购买 nike

对于 .NET DateTime 类型,为什么推断的数据库类型是 SqlDbTypes.DateTime 而不是 SqlDbTypes.DateTime2? (见 http://msdn.microsoft.com/en-us/library/yy6y35y8.aspx)

背景

通过默认为不太精确的 SQL DateTime 类型,.NET 框架保证,默认情况下,您通过具有未指定 SqlDbType 的 SqlParameter 对象传递的任何 .NET DateTime 值肯定是。因精度降低而损坏 .这是一个糟糕的设计决定,IMO,考虑到简单地保留全部值(value)不会产生更糟糕的后果。

例如,我不能使用 SqlParameterCollection.AddWithValue 方法,因为在传递 DateTime 值时,该值被截断为范围非常有限的 SQL DateTime 值。结果是:

  • .NET DateTime 值超出 SQL DateTime 值的允许范围,发生错误,或
  • 截断的值不会匹配数据库中更精确的值,也不会正确匹配更新操作的记录,更糟糕的是,IMO,因为它很微妙并且不会产生错误。

  • 问题

    由于 .NET DateTime 在精度和范围上都与 SQL Server 2008 数据类型“datetime2(7)”最接近,为什么框架将 SqlParameter 值转换为 SQL DateTime,有没有办法改变默认行为所以我仍然可以使用类型推断功能吗?

    我能看到的唯一建议是该功能已损坏,我 should always explicitly specify the data type ,这将需要大量的代码更改。我想如果框架只保留 .NET DateTime 值的原始值,问题会更少。如果数据库字段类型恰好是不太精确的 SQL DateTime 类型,那么传递给查询的日期/时间字符串值将被数据库引擎简单地截断。如果超出范围,您将得到一个错误,正如预期的那样。更重要的是,如果数据库字段类型是 datetime2,那么一切都会顺利进行,记录也会正确匹配。

    最佳答案

    datetime2仅在 SQL Server 2008 中添加。
    SqlDbType.DateTime2仅在 .NET 3.5 中添加到 .NET。

    对每个现有的 .NET 2.0/3.0 应用程序进行更改将是一个破坏性的行为更改。

    我不知道有任何钩子(Hook)可以更改该类型参数推断。

    关于.net - 对于 .NET DateTime 类型,为什么推断的数据库类型是 SqlDbTypes.DateTime 而不是 SqlDbTypes.DateTime2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8421332/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com