“TIMESTAMP”类型的列中的空字符串,导致无法读取

时间:2018-04-02 09:24:56

标签: c# sqlite system.data.sqlite

这是第三方数据库文件,因此我无法更改其架构。

我正在使用System.Data.SQLite.SQLiteDataAdapter.Fill方法获取目标表中的整个数据。

但是,如果读取数据行,则会FormatException"String was not recognized as a valid DateTime"

我检查了这个表,发现这一行在“TIMESTAMP”类型的列下存储了一个空字符串。

我尝试将此单元格更改为普通数据或null并且不会再次抛出异常,因此我确认此问题是由此空字符串引起的。

我在任何地方都找不到有效的解决方案,所以我问了这个问题。 有没有人解决过这个问题?

1 个答案:

答案 0 :(得分:1)

在被SQLite.NET开发团队确认后,他们认为这是WAD(按设计工作)。

所以我只能在阅读数据库时通过其他方式处理这个可能的问题。

//...
using (var comm = new SQLiteCommand($"SELECT * FROM {tableName}", conn))
{
    using (var reader = comm.ExecuteReader())
    {
        var dt = d.Tables[tableName];
        while (reader.Read())
        {
            var r = dt.NewRow();
            for (var i = 0; i < dt.Columns.Count; i++)
                try
                {
                    var val = reader.GetValue(i);
                    r[i] = val;
                }
                catch (FormatException)
                {
                    if (dt.Columns[i].DataType == typeof(DateTime))
                        r[i] = DateTime.MinValue;
                    else
                        throw;
                }
            dt.Rows.Add(r);
        }
    }
}

(PS:我仍然认为这是一个错误,因为填充表时Fill方法不应抛出此异常)