开发环境 vs2008 + sql 2008tb_a
  ID       DT1
 001  Jun 3 2011 6:34PM  
 002  07/24/2011 5:02:34
 003  Jun 3 2011 6:33PM
 004  06/21/2011 12:49:33
 005  Jun 3 2011 6:23PM
 006  07/17/2011 22:09:58ID的类型为 varchar(10)
DT1的类型为 varchar(30)现在我根据DT1转换为时间查询条件:
SqlStr= select * from tb_a where convert(datetime, DT1) >='05/01/2011 00:00:00' and DT1 < ='08/25/2011 23:00:00'该语句在mssql中查询能正确得到数据。但是到我系统中就报错。。Dim SQLCmd As New SqlCommand
SQLCmd.Connection = OpenConnect()
SQLCmd.CommandText = SqlStr
Dim Reader As SqlClient.SqlDataReader = SQLCmd.ExecuteReader
Reader.Read()  ///这里就报错"从字符串转换日期和/或时间时,转换失败。"请问是什么原因?

解决方案 »

  1.   

    因为你使用的是 select * from ...
    并没有把DT1这个字段转换成日期,
    改成:select ID,Convert(datetime,DT1) AS DT1 from ...
      

  2.   

    你字段就是string的,直接convert(datetime, DT1)改成DT1,直接比较
      

  3.   

    日期内容最好用DateTime日期类型的字段,这样才能方便转换
      

  4.   


    谢谢回答。。因为该系统的资料时直接通过excel导入 数据库表的
    没有规范用户在excel中的时间格式,在导入数据库表中的时候只要用varchar类型..
      

  5.   


    那就在导入的时候转换成日期,
    或者
    导入时候保留字符串,然后增加一个日期字段,然后写个程序把字符串转换成日期,不能转换的就保留null
    这样你也能清楚哪些格式不能正常转换的
      

  6.   


    SqlStr= select * from tb_a where convert(datetime, DT1) >=('05/01/2011 00:00:00'as datetime) and DT1 < =('08/25/2011 23:00:00' as datetime)这样你试试
      

  7.   

    DT1 < ='08/25/2011 23:00:00'
    LZ这个不可以这样比较吧
    要转下型哦
      

  8.   

    最好都改变为这样的形式:
    2011-08-31 类型(yyyy-MM-dd)
    这样再处理,应该就没事了。
    (表和程序都统一用一种格式就行)