【问题标题】:SQL Data reader returning wrong dateSQL 数据阅读器返回错误的日期
【发布时间】:2013-07-10 17:15:35
【问题描述】:

我正在处理一个 Excel 插件,从 SQL Server 数据库中检索数据并将其插入 Excel。

在数据库中我有一个日期2013-06-01 (YYYY-MM-DD)

使用SqlDataReader从数据库中读取时,以下命令:

myReader.GetValue(c)

返回06/01/2013 (DD-MM-YYYY),然后将when存储在Excel中,以6为日,1为月号

有什么想法吗?

谢谢

【问题讨论】:

  • 您的 SQL Server 列是什么数据类型?它应该是DATEDATETIME,然后你应该能够使用myReader.GetDateTime(c) 正确阅读它
  • 现在是 dateTime,myReader.GetDateTime(c) 仍然返回错误值 06/01/2013
  • 当你把它放入excel时,你能不能把日期时间重新格式化为字符串:myReader.GetDateTime(c).ToString("yyyy-MM-dd");

标签: c# sql-server visual-studio-2010 sqldatareader


【解决方案1】:

这可能是关于本地化的问题。
您既可以为 SQL 连接设置本地化,也可以为您正在使用的系统设置本地化,甚至可以在 excel 中设置列​​规范。
我最好的猜测是检查设置是否正常。

【讨论】:

    【解决方案2】:

    此行为似乎是由 SQL Server 和 Microsoft Excel 之间的不同本地化配置产生的。

    如果您无法更改此配置,我建议您使用CAST()CONVERT() 作为您用于检索数据的 SQL 语句。

    例如:

    SELECT CONVERT(DATETIME, Date_Column, 103) AS UsingConvertFrom_DDMMYYYY
    FROM TABLE_NAME
    

    使用这种方法(即不是最好的),您将强制 DataReader.GetValue 的值使用原始值“很好解析”。

    您可以查看MSDN 文档了解更多详细信息。

    【讨论】:

    • 问题是在日期进入excel之前,它在DataReader中日期被错误读取
    • SQL 将日期存储为日期,而不是字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多