我也有怀疑过。。因为查其他表好像都没有问题。我的datatable是从excel文件读出来的。但我看回出问题的那个excel表,感觉又没有空行

解决方案 »

  1.   

    很明显 你读取的格式 就是字符串..而不是datetime.不信你把你结果集每列的type都输出看看 你说报错的那列一定是string而不是datetime.计算机是不会骗人的..所以.现在要解决的办法也有很多..比如 把xls设置日期(虽然我不知道读取到的dt是不是datetime类型的)或者重新创建dt 指定某列的类型. 然后把那个"时间"转换之后 在扔到新的dt里 然后在<datetime>或者where的时候datetime.parse下你那string. 如果失败就给一个默认值.太多办法了....
      

  2.   


    DataTable dt = new DataTable();
                dt.Columns.Add("a", typeof(int));
                dt.Columns.Add("b", typeof(string));            dt.Rows.Add(1, "2014-12-12");
                dt.Rows.Add(2, "aaa");
                dt.Rows.Add(3, "2014-12-15");
                dt.Rows.Add(4, "2012-12-15");            var q = dt.AsEnumerable().Where(d =>
                {
                    var dx = d.Field<string>("b");
                    try
                    {
                        return Convert.ToDateTime(dx) > DateTime.Now;
                    }
                    catch (Exception)
                    {
                        return false;
                    }
                }).ToList().CopyToDataTable();
                for (int i = 0; i < q.Rows.Count; i++)
                {
                    Console.WriteLine(q.Rows[i][0].ToString() + " " + q.Rows[i][1].ToString());
                }
    差不多就是这样了...
      

  3.   

    指定的转换无效。。
    转换无效那是格式不正确呀,不是时间格式的。看看是不是有空值,或者空格。请问应该怎么找比较好呢。。表的数据有20几万。。一眼看过去好像都没问题。。
    你的条件是怎样写的?
                                             var q1 = from dt in sheet.AsEnumerable()
                                 orderby dt.Field<DateTime>("FTIME") descending
                                 where dt.Field<DateTime>("FTIME") >= Time && dt.Field<DateTime>("FTIME") < atime
                                 select dt;
      

  4.   


                   var dx = d.Field<string>("b");
                   var time=datetime.now;
                    try
                    {
                        time=Convert.ToDateTime(dx);
                    }
                    catch (Exception)
                    {
                       time=Convert.ToDateTime("1900-01-01");
                    }  
                    return time>  Convert.ToDateTime("2014-9-17 23:59:17");
    表示查询表中大于2014-9-17 23:59:17时间段数据..其中如果有不是时间或者时间不能转换的.默认时间给的是1900年差不多就是这样了..后面的都是手写 可能有一些问题.不过意思就是这样了.
      

  5.   

    如果数据库里是string类型,用datetime类型去接,即使只有1条数据也会报错的
    用datetime?
    表示允许null