这个是在服务器上运行的,从数据库中读取,在当前时间10分钟内的数据。但是,结果却发现,有时候,读的数据不止10分钟以内,比如,现在是2011-9-14 2:10:00,读出来的数据应该在2:00到2:10之间,结果却出现了2011-9-13 22:00以后的的数据,这是为什么呢?            using (SqlConnection con = new SqlConnection(""))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    int i = 10;
                    con.Open();
                    cmd.Connection = con;
                    cmd.CommandText = "select * from tablename where updatetime between @begin and @end order by updatetime";
                    cmd.Parameters.Add(new SqlParameter("@begin", DateTime.Now.AddMinutes(-i)));
                    cmd.Parameters.Add(new SqlParameter("@end", DateTime.Now));
                    using (SqlDataReader sr = cmd.ExecuteReader())
                    {
                        while (sr.Read())
                        { 
                          //...
                        }
                    }
                }
            }

解决方案 »

  1.   

    仔细看看DateTime.Now.AddMinutes结果是什么
    你把sql放到数据库中看看呢
      

  2.   

    DateTime.Now.AddMinutes(-10),也就是当前时间的前10分钟的时间,问题是查询的结果有时正常,有时不正常
      

  3.   

    楼主,你加一条trace语句,看看 cmd.CommandText 实际值到底是什么:                   using (SqlDataReader sr = cmd.ExecuteReader())
                        {
                            Trace.WriteLine("\n"+cmd.CommandText);
                            while (sr.Read())
                            { 
                              //...
                            }
                        }
      

  4.   


    DateTime nowDate = DateTime.Now;
    string startDate = nowDate.AddMinutes(-10).ToString("yyyy-MM-dd HH:mm:ss");
    string endDate = nowDate.ToString("yyyy-MM-dd HH:mm:ss");用同一个时间 nowDate 逻辑上比较严谨
    每一次都把最终的sql语句输出出来 当有错误的时候看看sql语句是什么样的
    最重要的是找出错出规律
      

  5.   

    將你的 CommandText 改成如下,在時間的判斷上,最好都以資料庫的時間為基準,不要用本機電腦的時間,不然當資料庫時間與本機電腦時間有誤差時,抓到的資料當然是錯的。select * from tablename where updatetime between DATEADD(MINUTE, -10, GETDATE()) and GETDATE() order by updatetime