1 try 2 { 3 string selectSql = "delete from zz_pf_data where UploadState = " + Convert.ToInt32(type).ToString() + " and update = '" + String.Format("{0:yyyy/MM/dd}",DateTime.Today.Date)+"'"; 4 5 object o = SQLite.ExecuteCommand(selectSql, out _errMsg); 6 if (o == null) 7 { 8 return false; 9 } 10 else 11 { 12 return true; 13 } 14 } 15 catch (Exception e) 16 { 17 _errMsg = e.Message; 18 return false; 19 }
C#代码如上所示,有条件(时间为今天的字段)删除记录,执行没有抱语法错误,但是object o = SQLite.ExecuteCommand(selectSql, out _errMsg);返回的结果是0,也就是影响了数据库数据的行数0。请问各位大虾Date类型数据不能比较吗?如果能,该如何写?谢谢
木有大虾解答,我只好蹩脚地用字符串来存取和比较时间了。。。。
你在数据库的date格式是yyyy/mm/dd 还是yyyy-mm-dd这个要看清楚,因为他比对的时候是以字符串比较
用不同的工具打开出现不同的形式,用了两个工具打开这个数据库表,update出现两种显示形式:一种是yyyy/mm/dd,一种是yyy-mm-dd,这个都不重要,执行的时候,貌似C#并不是按我的格式yyyy/mm/dd转化的,调试的时候,String.Format("{0:yyyy/MM/dd}",DateTime.Today.Date)的结果是yyyy-mm-dd形式,似乎会自动跟数据库格式匹配(个人理解)。
@amytal:
把update转换一下试试
date(update)='" + DateTime.Now.ToString(“yyyy-MM-dd”) + "'
@Rich.T: 还是一样,没有效果
@amytal:
先在查询分析器里试试能不能运行
select * from zz_pf_data where update='日期'
@Rich.T: 查询分析器报错:update=‘2013-01-23’有语法错误
@amytal:
那就对了,你这样都不行,还指望能查得出来
@Rich.T:
再试试下面这两个
select * from zz_pf_data where date(update)='日期'
select * from zz_pf_data where datetime(update)='日期 00:00:00'
@Rich.T: SQLite只有DATE和TIME类型,没有DateTime,你这两种都不行
@Rich.T: 我觉得还是参数有问题,难道必须是data或DateTime类型实参?
sqlite数据库要么是数字 要么是文本,所以你日期查询的话 本质上还是字符串比对,所以 对于今天的日期你本来也要做下转换:
DateTime.Now.ToString('yyyy-MM-dd') 这样出来的格式 然后 看你数据库里的格式是怎么样的
delete from zz_pf_data where UploadState = 1 and update = 2013-01-23 这个是调试时候,监视selectSql的值,但是执行结果还是0,数据库里的数据是2013-01-23。
@amytal: 你sql有问题 没单引号
@neverlost: 有单引号也无法比较,这个不是单引号的原因