2

我正在开发一个使用 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`))

感谢您的任何帮助,您可以提供。

4

3 回答 3

0

试试这个方法

select *  from alarms order  by date(date) DESC

请参阅文档

于 2013-04-22T20:15:19.820 回答
0

这里有一些关于这个问题的讨论;sqlite 抛出“字符串未被识别为有效日期时间”

显然 SQLite 日期时间到 C# DateTime 序列化映射并不完全有效。对我来说,听起来日期时间会以字符串的形式返回,因此您需要DateTime.Parse()在代码中执行此操作。在该问题的一个答案中,它表明日期时间还需要转换为 nvarchar 才能正常工作。

于 2013-04-22T20:15:34.063 回答
0

这是两件事之一:

  • 表中的数据实际上是 SQLite 无法转换为日期时间的格式。为获得最佳结果,请使用 ISO8601 日期格式“yyyy-MM-dd HH:mm:ss.FFFFFFF”。它需要在将数据写入数据库之前进行转换,但在将数据读回数据集时会进行透明处理。

  • 查询中的 ORDER BY 项由于某种原因阻止 SQLiteDataAdapter 识别列的正确类型。即使您按其他列排序,结果也是一样的。为避免此问题,请删除排序术语(然后将正确识别列数据类型)并在填充后对 DataSet 进行排序。

编辑:在查看了 Ramesh 的建议后,当使用“日期”功能和 Order By 时,我的第二点中概述的行为不再发生。

于 2014-08-22T22:14:00.453 回答