select count(*) from FRP_Bill 
where   TimeSent >= '2010-8-7 00:00:00.000' and  TimeSent <'2010-9-8 00:00:00.000' 
在sql里面可以运行,用参数将时间或者时间字符串传入也可以,
但是直接用字符串连接然后再ExcuteNonQuery的时候便报异常:
    从字符串向 datetime 转换时失败。 strWhere+= " TimeSent >= '" + searchModel.StrDateTimeBegin + "' and  TimeSent <'" + searchModel.StrDateTimeEnd1 + "' " ...;连接后产生的sql字符串便是上面贴出来的 请问这是什么原因?
sqlServer2005里面的查询分析器直接执行的sql语句 和 C#内传给SQLServer执行的sql语句两者的区别在何处呢?
为什么传参数又不会出错?

解决方案 »

  1.   

    command.Parameters.Add("@TimeSent", SqlDbType.DateTime, 8);
    command.Parameters["@seldate"].Value =searchModel.StrDateTimeBegin;
    TimeSent >= @TimeSent
      

  2.   

    strWhere+= " TimeSent >= '" + searchModel.StrDateTimeBegin + "' and  TimeSent <'" + searchModel.StrDateTimeEnd1 + "' " ...;
    ========
    strWhere+= " TimeSent >= '" + searchModel.StrDateTimeBegin.ToString("yyyy-MM-dd HH:mm:ss:fff") + "' and  TimeSent <'" + searchModel.StrDateTimeEnd1.ToString("yyyy-MM-dd HH:mm:ss:fff") + "' " ...;
      

  3.   

    searchModel.StrDateTimeBegin.ToString("yyyy-MM-dd HH:mm:ss:fff")
      

  4.   

    补充:searchModel.StrDateTimeBegin内的数据就是ToString("yyyy-MM-dd HH:mm:ss:fff") 后的结果
    2 3 L的方法都不行1L的 参数是可以用,我也知道 ,不过还是谢谢。
      

  5.   

    用字符串为何不行呢?参数确实行的 不用重复了
    异常的sql语句直接复制到sqlserver中却能执行 ,这是为什么呢?