积极答复者
有关SQlite的一个困惑的问题

问题
-
程序代码如下:
sqlTime = "select SUM(onlineTimeSpan) From T_OnlineTimeSum where ipAddress = :a AND onlineDate BETWEEN :b AND :c";
daSpan = new SQLiteDataAdapter(sqlTime, conn);
daSpan.SelectCommand.Parameters.Add(new SQLiteParameter("a", DbType.String));
daSpan.SelectCommand.Parameters.Add(new SQLiteParameter("b", DbType.String));
daSpan.SelectCommand.Parameters.Add(new SQLiteParameter("c", DbType.String));daSpan.SelectCommand.Parameters[0].Value = Address;
daSpan.SelectCommand.Parameters[1].Value = startDate.Date.ToString("yyyy-MM-dd");
daSpan.SelectCommand.Parameters[2].Value = endDate.Date.ToString("yyyy-MM-dd");
这样写查询时间天数是一位的准确的比如 如下:
select SUM(TimeSpan) From TimeSum where Address = 'xxxx' AND lineDate BETWEEN '2009-12-04' AND '2009-12-06'
但是如果时间跨度为 '2009-12-14' 到 '2009-12-16' 时候这样写就会产生问题只能合计到 14,15号2天的值,
但是如果改为如下代码:
daSpan.SelectCommand.Parameters.Add(new SQLiteParameter("b", DbType.Date));
daSpan.SelectCommand.Parameters.Add(new SQLiteParameter("c", DbType.Date));
daSpan.SelectCommand.Parameters[1].Value = startDate.Date;
daSpan.SelectCommand.Parameters[2].Value = endDate.Date;
就计算正确,但是如果这样写 的话当时间为 '2009-12-4' 到 '2009-12-6'时候就合计不正确 有没有遇到的阿,请给解释一下阿。
我觉得不应该啊。- 已移动 Sheng Jiang 蒋晟Moderator 2009年12月17日 4:43 System.Data (发件人:.NET Framework 一般性问题讨论区)
答案
全部回复
-
如果那列是日期格式的 传参的时候设置参数值直接为DateTime类型就可以了没必要转换成字符串类型的
sqlTime = "select SUM(onlineTimeSpan) From T_OnlineTimeSum where ipAddress = :a AND onlineDate BETWEEN :b AND :c";
daSpan = new SQLiteDataAdapter(sqlTime, conn);
daSpan.SelectCommand.Parameters.Add(new SQLiteParameter("a", DbType.String));
daSpan.SelectCommand.Parameters.Add(new SQLiteParameter("b", DbType.Date));
daSpan.SelectCommand.Parameters.Add(new SQLiteParameter("c", DbType.Date));daSpan.SelectCommand.Parameters[0].Value = Address;
daSpan.SelectCommand.Parameters[1].Value = startDate.Date;
daSpan.SelectCommand.Parameters[2].Value = endDate.Date;
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~ -
首先你的数据库中存放的日期字段是什么格式的?
数据库中存放的日期带时间(2008-06-15 03:35:28)了吗?
你用字符串比较和直接用日期比较可能有区别,比较时先把日期格式化下
http://www.cppblog.com/sleepwom/archive/2008/12/05/68613.html
努力+方法=成功 -
我又测试了 一下使用如下代码:
sqlTime = "select SUM(onlineTimeSpan) From T_OnlineTimeSum where ipAddress = :a AND onlineDate BETWEEN :b AND :c";
daSpan = new SQLiteDataAdapter(sqlTime, conn);
daSpan.SelectCommand.Parameters.Add(new SQLiteParameter("a", DbType.String));
daSpan.SelectCommand.Parameters.Add(new SQLiteParameter("b", DbType.Date));
daSpan.SelectCommand.Parameters.Add(new SQLiteParameter("c", DbType.Date));daSpan.SelectCommand.Parameters[0].Value = Address;
daSpan.SelectCommand.Parameters[1].Value = startDate.Date;
daSpan.SelectCommand.Parameters[2].Value = endDate.Date;
发现当时间 2009-12-2~2009-12-5 的时候合计结果错误
如果测试时间为 2009-12-12~2009-12-15 的时候合计结果正确。
请问 谁知道为什么啊。