这是第三方数据库文件,因此我无法更改其架构。
我正在使用System.Data.SQLite.SQLiteDataAdapter.Fill
方法获取目标表中的整个数据。
但是,如果读取数据行,则会FormatException
:"String was not recognized as a valid DateTime"
。
我检查了这个表,发现这一行在“TIMESTAMP”类型的列下存储了一个空字符串。
我尝试将此单元格更改为普通数据或null并且不会再次抛出异常,因此我确认此问题是由此空字符串引起的。
我在任何地方都找不到有效的解决方案,所以我问了这个问题。 有没有人解决过这个问题?
答案 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
方法不应抛出此异常)