用Sqlite数据库填充包含DateTime列的DataSet
本文关键字:DateTime 列的 DataSet 包含 填充 Sqlite 数据库 | 更新日期: 2023-09-27 18:10:35
我正在做一个使用SQLite数据库的c# WPF项目。我正在尝试从sqlite数据库中的表中检索数据,并添加到数据集,这样我就可以将数据集添加到数据网格的项目源。其中一列是DateTime列,但我得到以下错误:
String was not recognized as a valid DateTime.
下面是我如何检索数据
private DataSet getAlarmsForSqlite()
{
DataSet ds = new DataSet();
try
{
using (ConnectSQLiteDatabase db = new ConnectSQLiteDatabase(dbPassword))
{
string query = "SELECT * FROM alarms ORDER BY date";
SQLiteDataAdapter da = new SQLiteDataAdapter(query, db.conn);
da.Fill(ds);
}
}
catch (SQLiteException ex)
{
Console.WriteLine("Failed to get alarms. Sqlite Error: {0}", ex.Message);
return null;
}
return ds;
}
下面是表
的create语句CREATE TABLE `alarms` (`id` int(11) NOT NULL, `date` datetime NOT NULL,
`type` varchar(50) NOT NULL,
`message` mediumtext NOT NULL,
`level` varchar(45) NOT NULL,
`page` varchar(500) NOT NULL,
`acknowledged` char(1) DEFAULT '0', PRIMARY KEY (`id`))
谢谢你能提供的任何帮助。
试试这个
select * from alarms order by date(date) DESC
这里有一些关于这个问题的讨论;sqlite抛出一个"无法识别为有效日期时间"的字符串
显然SQLite的datetime到c#的datetime序列化映射不完全工作。对我来说,这听起来像是datetime作为一个字符串回来,所以你需要在你的代码中做DateTime.Parse()
。在这个问题的一个答案中,它建议datetime也需要被强制转换为nvarchar,以便它工作。
这是两件事之一:
-
表中的数据实际上是SQLite不是的格式能够变成一个约会时间。为获得最佳效果,请使用ISO8601日期格式为"yyyy-MM-dd HH:mm:ss.FFFFFFF"。它需要在将数据写入数据库之前进行转换,但是
-
由于某种原因,查询中的ORDER BY项阻止了的正确类型列。即使你按其他列排序,结果也是相同的。为了避免这个问题,删除排序项(它将然后正确识别列数据类型)并对数据集进行排序
编辑:在研究了Ramesh的建议后,当使用Order By的"日期"函数时,我在第二点中概述的行为不再发生。