sqlite抛出“字符串未被识别为有效的日期时间”

我正在玩Sqlite并在尝试回读一些测试数据时不断收到错误。 例如,我创建了一个带有单个表和一些列的简单数据库,并使用一些测试数据填充它,如下所示。

sqlite> .schema CREATE TABLE "shows"(id integer primary key asc autoincrement, showName TEXT, guest TEXT, dateAired date, dateWatched date); sqlite> select * from shows; 6|test show|test guest 1|2012.05.01|2012.07.10 7|test show|test guest 2|2012.05.02|2012.07.10 8|test show|test guest 4|2012.05.04|2012.07.10 

我正在使用此处提供的System.Data.Sqlite库,但它在尝试读取日期列时不断给出错误。 我尝试将日期设置为dd-MM-yyyy格式,但仍然会收到错误消息“字符串未被识别为有效的日期时间”。 我已经尝试使用DateTime.Parse或将其转换为datetime或只是ToString()来查看发生了什么,但我一直得到同样的错误。 我可以很好地阅读文本字段,但无法读取日期字段。

我的C#代码剪断如下

 var sqliteConn = new SQLiteConnection("Data Source=data/shows.db;Version=3;New=False;Compress=True"); sqliteConn.Open(); SQLiteCommand cmd = new SQLiteCommand(sqliteConn); cmd.CommandText = "select * from shows"; SQLiteDataReader reader = cmd.ExecuteReader( ); while (reader.Read( )) { var showName = reader["showName"]; // This is where it keeps giving me an error. // I have tried various things such as DateTime.Parse var airedDate = DateTime.ParseExact("yyyy.MM.dd", reader["dateAired"].ToString(), new CultureInfo("en-AU")); } reader.Close( ); 

任何帮助将不胜感激。

问候,

基于此线程中的讨论,我决定使用“datetimeformat”参数构造我的连接字符串,并解决了“未识别为有效日期时间的字符串”问题。

我的示例连接字符串:

 source=;version=3;new=False;datetimeformat=CurrentCulture 

此function于2013年7月8日在1.0.87.0版本中发布(请参阅发行说明 )

这个线程可能有点旧,但我遇到了同样的问题并找到了一个“解决方案”。

似乎System.Data.SQLite没有正确处理DateTime 。 我尝试了DateTime.ParseExact并在我的数据库中给出了格式(mm / dd / yyyy),但是我注意到它只是在DataReader列上调用日期的ToString()时出错了。 这似乎很奇怪,因为我没有尝试将它放入Date而是将其读作String

因此,我回到了我从数据库调用的视图,并将我在CAST as nvarchar(10)所有日期包装CAST as nvarchar(10) 。 这样,数据库将返回字符串而不是日期。 现在, DateTime.Parse工作正常!

我将在视图上使用触发器将字符串/日期拉回并插入/更新基础表,从而使所有转换都发生在数据库中,而不是System.Data.SQLite。

在2012年12月的某个时候有一个新版本的System.Data.SQLite,我希望这个问题得到解决!

 select strftime('%m/%d/%Y',substr(colName,0,20)) from tablename 

这将是有效的,我已经测试了这个,因为sqlite中的内置函数将字符串转换为日期时间格式

错误“字符串未被识别为有效的DateTime”。

将系统日期时间格式更改为数据库fild日期时间格式。

我希望它可以帮助你……