"TIMESTAMP" 类型的列中的空字符串导致不可读
An empty string in a column of type "TIMESTAMP", caused unreadable
这是第三方数据库文件,所以我无法更改它的架构。
我正在使用 System.Data.SQLite.SQLiteDataAdapter.Fill
方法获取目标 table 中的全部数据。
但是当它读到一个数据行时会抛出一个FormatException
:"String was not recognized as a valid DateTime"
.
我检查了这个 table 并发现该行在类型为 "TIMESTAMP" 的列下存储了一个空字符串。
我尝试将此单元格更改为普通数据或 null 并且不会再次抛出异常,因此我确认此问题是由此空字符串引起的。
我在任何地方都没有找到有效的解决方案,所以我问了这个问题。
有人解决过这个问题吗?
经过SQLite.NET开发团队的确认,他们认为这是WAD(Works As Designed)。
所以我只能在读数据库的时候用其他方式处理这个可能出现的问题
//...
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
方法在填充 table)
时不应抛出此异常
这是第三方数据库文件,所以我无法更改它的架构。
我正在使用 System.Data.SQLite.SQLiteDataAdapter.Fill
方法获取目标 table 中的全部数据。
但是当它读到一个数据行时会抛出一个FormatException
:"String was not recognized as a valid DateTime"
.
我检查了这个 table 并发现该行在类型为 "TIMESTAMP" 的列下存储了一个空字符串。
我尝试将此单元格更改为普通数据或 null 并且不会再次抛出异常,因此我确认此问题是由此空字符串引起的。
我在任何地方都没有找到有效的解决方案,所以我问了这个问题。 有人解决过这个问题吗?
经过SQLite.NET开发团队的确认,他们认为这是WAD(Works As Designed)。
所以我只能在读数据库的时候用其他方式处理这个可能出现的问题
//...
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
方法在填充 table)