Sqlite DateTime读取和写入格式问题

前端之家收集整理的这篇文章主要介绍了Sqlite DateTime读取和写入格式问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

http://www.shangxueba.com/jingyan/108788.html@H_404_1@

今天遇到个问题.@H_404_1@

首先插入一个DataTime格式的数据:@H_404_1@

string sql="insert into [table] (date_time) values('" + 

date_time.ToString() + "'";

执行如上命令.插入没有报告错误.@H_404_1@

但是,我又用一条命令读取时:@H_404_1@

string sql="select * from [table];
.....
IDataReader dr=cmd.ExecuteReader();
...

object obj=dr["data_time"];//在这里出错了,说是无法转换为DataTime格式,字 符串不正确@H_404_1@

------------------------------------------------------------------- -------------------------@H_404_1@

我找了一天的教程,找了一天的google.@H_404_1@

答案是:sqlite用的全球时间UTC,要用datetime()函数转换若干.@H_404_1@

我也试了,发现好像运行的不像教程上说的那样!@H_404_1@

实在没办法,来硬的吧,硬着头皮看源代码吧.@H_404_1@

他的继承格式大致如下:@H_404_1@

sqliteConvert-->sqliteBase-->sqlite3@H_404_1@

sqliteConvert中定义了转换格式,上面说的很明白,默认DataTime格式为 ISO8601@H_404_1@

然后,sqliteConnection 用到了sqlite3.@H_404_1@

我就研究了sqliteConnection的源代码,发现sqlite不是用的什么全球的UTC时 间.@H_404_1@

其实就是用的国际标准ISO 8601标准.@H_404_1@

那我就着手看怎么才能让我的程序和sqlite兼容.@H_404_1@

生成的字符串和sqlite的有什么不同.@H_404_1@

最后看了msdn上对iso 8601的描述:(http://msdn.microsoft.com/zh- cn/library/ms187819.aspx)@H_404_1@

给出了字符串示例:@H_404_1@

* 2004-05-23T14:25:10@H_404_1@

* 2004-05-23T14:25:10.487@H_404_1@

而我生成的字符串 data_time.ToString()和他的有一个不同的地方.更多教程@H_404_1@

就是没有那个T....(其实我也不明白那个T有什么关键作用,反正 Access,MysqL,Mssql都没这问题的)@H_404_1@

我又在想,如果我用一个T会如何?@H_404_1@

就尝试.用data_time.ToString("s");这种方法转换成 iso 8601标准字符串格 式@H_404_1@

结果我吃屎吃了个酱板头(无锡话,意思是运气好),竟然成功了.@H_404_1@

如下:@H_404_1@

string sql="insert into [table] (date_time)" values('" + 

date_time.ToString("s") + "'";

这样,问题就解决了,希望大家能够看到此贴,并发扬光大,到处流传,这样才能 发展sqlite的普及率.@H_404_1@

附注:@H_404_1@

我起先研究了BBSMAX的sqlite数据库.我认为这个论坛会有好的解决方法.@H_404_1@

但我错了.其实没有.bbsMax用了varchar代替DateTime格式.@H_404_1@

我也照做了,但是当我用到 select * from [table] where date_time > '2006-1-1' and date_time< '2008-1-1'@H_404_1@

类似这样的语句,想查询一个中间的时间类型时,语法错误.@H_404_1@

所以,到头来,我还是从头开始研究DateTime格式.字符串格式虽然能够凑合,但 是却没有那么方便和强大.@H_404_1@

猜你在找的Sqlite相关文章