【问题标题】:Format Date in OleDB Query在 OleDB 查询中格式化日期
【发布时间】:2016-01-12 14:38:16
【问题描述】:

我正在尝试找到一种方法来正确格式化从旧 Visual Fox Pro 数据库加载数据的 SELECT 语句中的日期。我需要这样做,以便将其加载到 CSV 中,然后将其加载到 MySQL,它采用日期格式 'yyyy-MM-dd'。

这是我目前的查询;

var dbfCmd = new OleDbCommand(@"SELECT ct_id, ct_cmpid, ct_empid, ct_pplid, ct_cntid, ct_pplnm, ct_date, ct_time, ct_type, ct_doneby, ct_desc FROM contacts", dbfCon);

我需要找到一种方法来格式化ct_date 列。到目前为止,我已经尝试了多种方法,包括使用FDATEFORMAT,但到目前为止没有任何效果。我查看了OleDB 支持的命令,但仍然没有遇到任何问题。

谁能告诉我格式化日期查询以便我可以导入 MySQL 的正确方法?

【问题讨论】:

    标签: c# mysql csv import visual-foxpro


    【解决方案1】:

    不要在服务器上格式化日期。

    作为日期列接收,然后在枚举查询时读取为DateTime 值。最后在写入文件时以指定的方式在您的客户端上格式化。

    【讨论】:

    • 目前我找不到在 C# 中格式化 DateTime 的方法。这是我目前使用的; ContactDate = Convert.ToDateTime(myReader[6]),。当我真的希望使用yyyy-MM-dd 时,这会将其读取为DD-MM-YYYY hh:mm:ss 的格式,因为这是MySQL 接受的。我怎么能在 C# 中做到这一点?
    • myDateTime.ToString("yyyy-MM-dd")。 (MSDN 上有很多格式信息)。
    【解决方案2】:

    虽然有人建议将 C# 中的数据转换为日期格式,但如果您真的想从 VFP OleDb 查询中提取格式化的日期,您可以为您的日期列执行此操作

    STUFF( STUFF( DTOS( ct_date ), 5, 0, "-"), 8, 0, "-" )
    

    VFP 函数 DTOS 会将日期(或日期时间)转换为字符串,并且始终采用 YYYYMMDD 格式。 STUFF 命令将为您插入连字符以正确设置为 YYYY-MM-DD。

    【讨论】:

      【解决方案3】:

      您可以简单地使用 ToString("yyyy-MM-dd") 但最好不要这样做。您可以直接连接到 MySQL 并使用 VFP 命令将数据插入其中,并通过 ExecScript 调用它。或者您可以在 MySQL 连接中直接从 VFP 导入(我不使用 MySQL,但您可以使用其他数据库,如 MS SQL Server、postgreSQL 等,所以我假设 MySQL 也可以这样做)。 另一种选择是使用比纯文本更可靠的 XML 格式来导入/导出。 还有另一种方式,您可以连接到 MySQL 和 VFP,用您的数据填充 MySQL DataTable 并提交更改。

      IOW 在两者之间使用文本文件将是我的最后一个建议。

      PS:看看 FileHelpers。

      【讨论】:

        猜你喜欢
        • 2015-01-02
        • 1970-01-01
        • 1970-01-01
        • 2021-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        • 1970-01-01
        相关资源
        最近更新 更多