日期:2014-05-17  浏览次数:20765 次

用数据库的存储数据做查询,在SQL中的执行结果和C#中不同?!
本帖最后由 treeglow 于 2013-10-04 17:25:36 编辑
时间段查询,SQL中执行存储数据和在C#中执行储存数据结果不一样。
完全一样的输入参数:
FromDT "2013-09-12 11:50:20" string
ToDT "2013-09-12 12:10:20" string
sql中返回2条结果,11:53的和12:08的数据。
C#中只返回1条结果,12:08的。
为什么?为什么?为什么?

                conn.Open();
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "sp_select_onlytime";
                SqlParameter inparm1 = cmd.Parameters.Add("@start", SqlDbType.DateTime );
                SqlParameter inparm2 = cmd.Parameters.Add("@end", SqlDbType.DateTime);
                inparm1.Direction = ParameterDirection.Input;
                inparm2.Direction = ParameterDirection.Input;
                String FromDT = dtpfrdat.Value.ToString("yyyy-MM-dd")+" "+dtpfrtim.Value.ToString("HH:mm:ss");
                DateTime temp1=Convert.ToDateTime(FromDT);
                inparm1.Value = temp1;
                String ToDT = dtptodat.Value.ToString("yyyy-MM-dd") + " "+dtptotim.Value.ToString("HH:mm:ss");
                DateTime temp2=Convert.ToDateTime(ToDT);
                inparm2.Value = temp2;
                SqlDataReader rdr = cmd.ExecuteReader();

------解决方案--------------------
试试:
ALTER procedure [dbo].[sp_select_onlytime]
(@start datetime, @end datetime)
as
select
*
from
TestRecord 
where
(TestTime >= CONVERT(VARCHAR(30),@start,121) and (TestTime <= CONVERT(VARCHAR(30),@end,121));

------解决方案--------------------
楼主,你在 SqlDataReader rdr = cmd.ExecuteReader();这个命令之后,有没有调用
while(rdr.Read())
{
  ...
}
这个格式?
如果只调用rdr.Read(),你就只读取了第一行数据。