当前位置: 首页 > news >正文

Sqlite DateTime 类型 读取和写入格式 注意的问题

本文转载自 http://www.tntserver.cn/article.asp?id=41

 

今天遇到个问题.
首先插入一个DataTime格式的数据:
string sql="insert into [table] (date_time) values('" + date_time.ToString() + "'";
执行如上命令.插入没有报告错误.

但是,我又用一条命令读取时:
string sql="select * from [table];
.....
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 [table] (date_time)" values('" + date_time.ToString("s") + "'";

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

附注:
我起先研究了BBSMAX的Sqlite数据库.我认为这个论坛会有好的解决方法.
但我错了.其实没有.bbsMax用了varchar代替DateTime格式.
我也照做了,但是当我用到 select * from [table] where date_time > '2006-1-1' and date_time< '2008-1-1'
类似这样的语句,想查询一个中间的时间类型时,语法错误.

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

转载于:https://www.cnblogs.com/hhh/archive/2008/10/08/1306242.html

相关文章:

  • 文档知多少---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十五)...
  • 我在博客园里的第一篇文章
  • C#模拟网站用户登录
  • 平时关注.net今个儿用java做了个计算器.
  • FLEX:改变FLEX的默认LOADING效果-分别使用swf,PNG,gif
  • 婚礼
  • 快手 (KuaiShou.NET) 之账本应用
  • 三大搜索引擎 承诺“公正搜索”
  • MOSS Tip:如何更改文档库的SendTo菜单
  • 完整的全站黑白css代码为:
  • 如何使用ASP.Net加密Cookie
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • 关于URLRewriter配置中与项目其他组件权限的关系!
  • 很远的张楚何勇
  • 以表达式作为参数传入SQL的存储过程中去
  • 【391天】每日项目总结系列128(2018.03.03)
  • 5、React组件事件详解
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Java读取Properties文件的六种方法
  • magento 货币换算
  • node 版本过低
  • oschina
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • uni-app项目数字滚动
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • zookeeper系列(七)实战分布式命名服务
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从0到1:PostCSS 插件开发最佳实践
  • 观察者模式实现非直接耦合
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 数据仓库的几种建模方法
  • 听说你叫Java(二)–Servlet请求
  • 用Python写一份独特的元宵节祝福
  • #define与typedef区别
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (1)(1.11) SiK Radio v2(一)
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)计算机毕业设计ssm电影分享网站
  • (生成器)yield与(迭代器)generator
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)LINQ之路
  • (转)Oracle 9i 数据库设计指引全集(1)
  • *上位机的定义
  • .htaccess配置重写url引擎
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET的数据绑定
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET是什么
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!