程序代码如下:
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");
这样写查询时间天数是一位的准确的比如 2009年12月4号 到 2009年12月6号 如下:
select SUM(TimeSpan) From TimeSum where Address = 'xxxx' AND lineDate BETWEEN '2009-12-4' AND '2009-12-6'
但是如果时间跨度为 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号 时候就合计不正确 有没有遇到的阿,请给解释一下阿。
我觉得不应该啊。

解决方案 »

  1.   

    between '2009-12-4' AND '2009-12-6' 相当于between '2009-12-4 0:00:00' AND '2009-12-6 0:00:00'
    这样只能查到12.4和12.5两天的,要是把结束日期也查到,要多加一天,between '2009-12-4' AND '2009-12-7' 
      

  2.   

    你说的有道理,但问题是 onlineDate  这个字段在表内定义的是 Date类型的,并不是 DateTime类型的 应该不存在那个问题
      

  3.   

    我想到了一个问题  我传入的时间 是从画面上执行如下代码得到的
       DateTime startTime = new DateTime();
      startTime = Convert.ToDateTime(txtstartTime.Text);
    画面上是一个textBox 然后我在判断它符合日期格式后 进行转换的,不知道这样做 会不会产生影响。
      

  4.   

    我又测试了 一下使用如下代码:
    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 的时候结果正确。
    请问 谁知道为什么啊。