You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dapper查询DBF文件时日期列解析失败问题求助

解决Dapper查询DBF文件DateTime列解析错误问题

针对你遇到的Error parsing column 2 (CreatedOn= - Object)错误,以下是几种可行的解决方案:

1. 自定义Dapper类型处理器

DBF的日期字段返回值类型可能和.NET标准DateTime不兼容(比如返回OleDB日期格式或字符串),需要自定义类型解析逻辑:

public class DbfNullableDateTimeHandler : SqlMapper.TypeHandler<DateTime?>
{
    public override void SetValue(IDbDataParameter parameter, DateTime? value)
    {
        parameter.Value = value ?? DBNull.Value;
    }

    public override DateTime? Parse(object value)
    {
        if (value == null || value == DBNull.Value)
            return null;

        // 处理OleDB返回的double类型日期(OADate格式)
        if (value is double oleDbDate)
            return DateTime.FromOADate(oleDbDate);

        // 处理字符串格式的日期
        if (DateTime.TryParse(value.ToString(), out var parsedDate))
            return parsedDate;

        // 原生DateTime类型直接返回
        if (value is DateTime dateTime)
            return dateTime;

        return null;
    }
}

在应用启动时注册该处理器:

SqlMapper.AddTypeHandler(new DbfNullableDateTimeHandler());

2. 在DBF查询中预处理日期字段

在SELECT语句里对日期字段做空值处理或格式转换,确保返回可被解析的结果:

SELECT 
    {1} 
    Version,
    -- 处理空值并转换为标准日期格式(CTOD是FoxPro/DBF的字符串转日期函数)
    IIF(CreatedOn IS NULL, NULL, CTOD(CreatedOn)) AS CreatedOn,
    Features,
    IsDeprecated,
    CreatedBy,
    IIF(ModifiedOn IS NULL, NULL, CTOD(ModifiedOn)) AS ModifiedOn,
    ModifiedBy,
    IsDeprecated 
FROM {0} av

如果你的DBF日期是原生日期类型,可简化为空值处理:

ISNULL(CreatedOn, NULL) AS CreatedOn

3. 检查DBF连接字符串配置

确保连接DBF的驱动配置正确,不同驱动对日期解析逻辑有差异,推荐使用ACE驱动:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\YourDBFFolderPath;Extended Properties=dBASE IV;

若使用Jet驱动:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\YourDBFFolderPath;Extended Properties=dBASE IV;

4. 排查DBF中的异常数据

报错显示CreatedOn= - Object,大概率对应行的CreatedOn字段是空值或无效格式。可以直接打开example.dbf文件,检查对应列的数据是否存在空字符串、非日期格式的异常内容。

内容的提问来源于stack exchange,提问作者Sai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:12:03