【问题标题】:Dapper return reversed date formatDapper 返回反转日期格式
【发布时间】:2014-07-18 09:45:44
【问题描述】:

Dapper 返回日期类型列的格式与存储在数据库中的格式不同。

数据库中的格式----> 2012-05-19 15:27:00.000

dapper 返回 --------> 19-05-2012 15:27:00.000

var l = this.db.Query<myObject>("select id, received from myTable where( received between @d1 and @d2)",
                                                 new { @d1 = d1, @d2 = d2, }).ToList();

string  d1 = 2011-01-18 00:00:00
string  d2 = 2014-07-18 23:59:59

 public class myObjectIs 
 {
    public string id { get; set; }
    public string received { get; set; }

 }

已收到 - 数据时间类型列

Dapper 是否有预定义的日期类型格式来返回? 如果是,如何更改?

谢谢。

【问题讨论】:

  • 如果数据库中的数据类型是日期,不用管它。 c# 有可用的日期格式化工具。使用一个。
  • DateTime 值没有格式。是您的程序以“格式”显示 DateTime 值 但是,如果字段 received 是日期,为什么要将其存储在字符串中?改用 DateTime 变量
  • 数据库中的日期时间没有格式;这是一个数字。您是否将其存储为字符串?还是作为日期时间?
  • 另外:这里的d1d2 究竟是什么?他们是string?或DateTime ?再说一遍:究竟received 列的定义类型是什么?
  • 更新了我的 qyestion:d1 和 d2 是字符串,接收是数据时间

标签: c# sql orm dapper


【解决方案1】:

问题似乎是您将string 用于received,而不是DateTime。日期/时间没有格式,直到您真正强制它们成为字符串 - 此时它们不再是日期/时间。日期/时间只是一个数字

作为最后的努力,如果所有内置转换都用尽了,dapper 使用Convert.ChangeType 在类型之间进行转换。这将导致在这种情况下使用常规的ToString()。如果你不想要这个(你不应该想要这个):声明receivedDateTime

public DateTime received { get; set; }

同样,来自 cmets:

d1 和 d2 是字符串

他们不应该;他们也应该是DateTime

DateTime d1 = ..., d2 = ...

或者至少,您应该在数据访问代码中解析它:

new { d1 = [someparse(d1)], @d2 = [someparse(d2)], }

其中[someparse] 可能涉及DateTime.ParseDateTime.ParseExact

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2019-08-19
    • 1970-01-01
    • 2020-03-21
    • 2013-01-03
    • 1970-01-01
    相关资源
    最近更新 更多