相关疑难解决方法(0)

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

对于 .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 DateTime 值的允许范围,并且发生错误,或
  • 截断的值不会匹配数据库中更精确的值,并且不会正确匹配更新操作的记录,更糟糕的是,IMO,因为它很微妙并且不会产生错误。

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

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

.net datetime type-inference datetime2 sql-server-2008

5
推荐指数
1
解决办法
1313
查看次数

LINQ中的DateTime比较未返回正确的结果

我有以下LINQ来查询数据库并从特定日期检索已删除的产品.

 return _myDbEntities.Log
            .Where(p => p.Action.Equals("Deleted") &&
            (p.ActionDate > fromDate))
            .Select(p => new DeletedProduct()
            {
                ProductId = p.ProductId,
                ActionDate = p.ActionDate
            }).ToList();
Run Code Online (Sandbox Code Playgroud)

但是,当fromDate来自日期= {12/8/2016 11:41:00 AM}时,查询正在检索诸如product.ActionDate.Value = {12/8/2016 11:41:00 AM}之类的值.

查询清楚地说大于.这里发生了什么?

c# linq datetime

5
推荐指数
1
解决办法
279
查看次数

SQL Server中奇怪的日期时间行为

 declare @data datetime
 set @data = '2011-01-01 23:59:59:999'
 select @data  
Run Code Online (Sandbox Code Playgroud)

结果是:

 2011-01-02 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

第二个例子:

 declare @data datetime
 set @data = '2011-01-01 23:59:59:999'
 select 1 where @data >= '2011-01-02 00:00:00:000'
Run Code Online (Sandbox Code Playgroud)

结果

 1
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么以及如何使其正确?

编辑

问题出在sql server 2008中

sql datetime sql-server-2008

4
推荐指数
1
解决办法
3951
查看次数

有没有理由不使用DateTime2?

我错过了不使用新的DateTime2数据类型的理由吗?

例如,迁移到另一个数据库系统或将其与其他技术集成时是否会导致问题?

datetime2 sql-server-2008

4
推荐指数
1
解决办法
960
查看次数

标签 统计

datetime ×3

sql-server-2008 ×3

datetime2 ×2

.net ×1

c# ×1

linq ×1

sql ×1

type-inference ×1