原文;http://hi.baidu.com/hopesoft/blog/item/4c29e7f83f320b09d9f9fd96.html
今天遇到个问题.
首先插入一个DataTime格式的数据:
string sql="insert into (date_time) values('" + date_time.ToString() + "'";
执行如上命令.插入没有报告错误.
但是,我又用一条命令读取时:
string sql="select * from ;
.....
IDataReader dr=cmd.ExecuteReader();
...
object obj=dr["data_time"];//在这里出错了,说是无法转换为DataTime格式,字符串不正确
--------------------------------------------------------------------------------------------
我找了一天的教程,找了一天的google.
答案是:sqlite用的全球时间UTC,要用datetime()函数转换若干.
我也试了,发现好像运行的不像教程上说的那样!
实在没办法,来硬的吧,硬着头皮看源代码吧.
他的继承格式大致如下:
SqliteConvert-->SqliteBase-->Sqlite3
在SqliteConvert中定义了转换格式,上面说的很明白,默认DataTime格式为 ISO8601
然后,SqliteConnection 用到了Sqlite3.
我就研究了SqliteConnection的源代码,发现Sqlite不是用的什么全球的UTC时间.
其实就是用的国际标准ISO 8601标准.
那我就着手看怎么才能让我的程序和sqlite兼容.
我生成的字符串和sqlite的有什么不同.
最后看了msdn上对iso 8601的描述:(http://msdn.microsoft.com/zh-cn/library/ms187819.aspx)
给出了字符串示例:
* 2004-05-23T14:25:10
* 2004-05-23T14:25:10.487
而我生成的字符串 data_time.ToString()和他的有一个不同的地方.
就是没有那个T....(其实我也不明白那个T有什么关键作用,反正Access,MySql,MsSql都没这问题的)
我又在想,如果我用一个T会如何?
就尝试.用data_time.ToString("s");这种方法转换成 iso 8601标准字符串格式
结果我吃屎吃了个酱板头(无锡话,意思是运气好),竟然成功了.
如下:
string sql="insert into (date_time)" values('" + date_time.ToString("s") + "'";
这样,问题就解决了,希望大家能够看到此贴,并发扬光大,到处流传,这样才能发展Sqlite的普及率.
附注:
我起先研究了BBSMAX的Sqlite数据库.我认为这个论坛会有好的解决方法.
但我错了.其实没有.bbsMax用了varchar代替DateTime格式.
我也照做了,但是当我用到 select * from where date_time > '2006-1-1' and date_time< '2008-1-1'
类似这样的语句,想查询一个中间的时间类型时,语法错误.
所以,到头来,我还是从头开始研究DateTime格式.字符串格式虽然能够凑合,但是却没有那么方便和强大.
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com