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

TIMESTAMP列存空字符串导致SQLiteDataAdapter.Fill抛出FormatException

解决SQLiteDataAdapter.Fill时因TIMESTAMP列空字符串引发的FormatException问题

我刚碰到过完全一样的坑!问题的核心在于System.Data.SQLite对TIMESTAMP类型的解析逻辑:它会自动尝试把列值转换为.NET的DateTime类型,但空字符串""并不是有效的DateTime格式,而Null值会被解析为可空的DateTime?类型,所以不会触发异常。

既然你没办法修改第三方数据库的Schema,这里有几个实用的解决思路:

  • 方案一:修改查询语句,将空字符串替换为Null
    直接在查询时把空字符串转换成Null,让Fill方法能正常解析。示例SQL:

    SELECT 
        CASE WHEN TIMESTAMP_COL = '' THEN NULL ELSE TIMESTAMP_COL END AS TIMESTAMP_COL,
        -- 其他需要查询的列...
    FROM YOUR_TARGET_TABLE
    

    这样返回的结果里就不会有空字符串,而是合法的Null值,完美适配SQLiteDataAdapter的自动解析逻辑。

  • 方案二:改用SQLiteDataReader手动读取处理
    如果不想修改查询语句,可以放弃直接用Fill填充DataTable,改用SQLiteDataReader逐行读取,手动控制TIMESTAMP列的解析:

    using (var connection = new SQLiteConnection("你的连接字符串"))
    {
        connection.Open();
        var command = new SQLiteCommand("SELECT * FROM YOUR_TARGET_TABLE", connection);
        using (var reader = command.ExecuteReader())
        {
            var dataTable = new DataTable();
            dataTable.Load(reader); // 先加载表结构和原始数据
    
            foreach (DataRow row in dataTable.Rows)
            {
                var timestampValue = row["TIMESTAMP_COL"].ToString();
                if (string.IsNullOrWhiteSpace(timestampValue))
                {
                    row["TIMESTAMP_COL"] = DBNull.Value;
                }
                else
                {
                    // 按需手动转换为DateTime,或者保留字符串形式
                    row["TIMESTAMP_COL"] = DateTime.Parse(timestampValue);
                }
            }
        }
    }
    

    这种方式灵活性拉满,能完全掌控每一列的处理逻辑,避免自动转换带来的异常。

  • 方案三:配置SQLite日期格式为字符串映射
    你还可以通过全局配置,让System.Data.SQLite把TIMESTAMP列当作字符串读取,之后再在业务代码里处理转换:

    // 在初始化连接前设置
    SQLiteConnection.SetDateTimeFormat(SQLiteDateFormats.String);
    

    这样所有TIMESTAMP列都会以字符串形式加载,你可以后续判断是否为空,再转换为DateTime或设置为Null。

总的来说,方案一是最快捷的解决方式,直接在查询层搞定问题;如果需要更灵活的控制,方案二或三会更适合你的场景。

内容的提问来源于stack exchange,提问作者Mr. Squirrel.Downy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:30:55