我正在使用一个使用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 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`))
感谢您提供的任何帮助。
答案 0 :(得分:0)
答案 1 :(得分:0)
这里有一些关于这个问题的讨论; sqlite throwing a "String not recognized as a valid datetime"
显然SQLite日期时间到C#DateTime序列化映射并不完全有效。对我来说,听起来像日期时间以字符串形式返回,因此您需要在代码中执行DateTime.Parse()
。在该问题的一个答案中,它表明日期时间也需要转换为nvarchar以便它可以工作。
答案 2 :(得分:0)
这是两件事之一:
表中的数据实际上是SQLite不是的格式 能够变成日期时间。为获得最佳效果,请使用 ISO8601日期格式" yyyy-MM-dd HH:mm:ss.FFFFFFF"。这个需要 在将数据写入数据库之前进行转换,但是 在将数据读回数据集时透明地处理。
查询中的ORDER BY术语出于某种原因阻止了 SQLiteDataAdapter来识别正确的类型 柱。即使您按其他列排序,结果也是如此 相同。为避免此问题,请删除订购条款(将使用 然后正确识别列数据类型)并对DataSet进行排序 在它被填满之后。
编辑:在查看Ramesh的建议后,使用" date"使用Order By功能,我的第二点中概述的行为不再发生。