Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用Sqlite数据库填充包含DateTime列的数据集_C#_Sqlite_Datetime - Fatal编程技术网

C# 用Sqlite数据库填充包含DateTime列的数据集

C# 用Sqlite数据库填充包含DateTime列的数据集,c#,sqlite,datetime,C#,Sqlite,Datetime,我正在从事一个使用SQLite数据库的C WPF项目。我正在尝试从sqlite数据库中的表中检索数据,并将其添加到数据集,以便将数据集添加到数据网格的items源中。其中一列是DateTime列,但我发现以下错误: String was not recognized as a valid DateTime. 下面是我如何检索数据的 private DataSet getAlarmsForSqlite() { DataSet ds = new DataSe

我正在从事一个使用SQLite数据库的C WPF项目。我正在尝试从sqlite数据库中的表中检索数据,并将其添加到数据集,以便将数据集添加到数据网格的items源中。其中一列是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 datetime到C datetime的序列化映射并不完全有效。对我来说,这听起来像是datetime以字符串的形式返回,所以您需要在代码中执行datetime.Parse。在该问题的一个答案中,它表明日期时间也需要转换为nvarchar才能工作。

这是两件事之一:

表中的数据的格式实际上与SQLite不同 能够变成一个日期时间。为了获得最佳效果,请使用 ISO8601日期格式yyyy MM dd HH:MM:ss.FFFFFFF。它需要 在将数据写入数据库之前进行转换,但是 将数据读回数据集时透明地处理

查询中的ORDER BY term出于某种原因阻止了 SQLiteDataAdapter无法识别 柱即使按其他列排序,结果也将是 相同的。为避免此问题,请删除将 然后正确识别列数据类型并对数据集进行排序 在它被填满之后


编辑:在研究了Ramesh的推荐之后,当使用带有Order By的date函数时,我在第二点中概述的行为不再发生。

我不确定,但名为date的列有点可疑。你能试着用方括号把它封装起来吗?不确定你的意思,怀疑以什么方式,方括号会起什么作用我怀疑这是一个关键字,我的意思是按[日期]从报警顺序选择*,实际上SQLite希望在关键字周围加上双引号,但为了兼容性,方括号是可以接受的,而且很容易编写。啊,好吧,试过了,但仍然没有成功。我不认为order by though是datetime错误发生的原因。您的代码似乎绝对合法,也许该列中有一些无效的datetime。您可以尝试使用DataReader进行调试,并在数据中循环,直到得到错误。谢谢,但我认为这没有帮助,因为这个问题他们正在删除结果集,以便他们可以操作每个字段,而我没有这样做,因为我只是将整个结果集放入数据集。我没有在C中处理数据集,但您不是吗还需要创建某种合同吗?像列1是类型a并映射到我的数据集的列1?如果是这样的话,我打赌你可以强制那里的值。其他.NET序列化方法(如Entity Framework)提供了这些功能,因此我认为数据集也可能具有这些功能。