数据库里的数据时这样1972-2-3 0:00:00(BirthDay来的),但是我从数据库里面读取数据时user.BirthDay = (DateTime)row["BirthDay"];却出错!其中user.BirthDay 的数据类型是DateTime;
但是却提示  “指定的转换无效”
这个是什么原因!是不是因为数据库里面的数据后面有了时分秒而出错!如果是的话那要怎么样转换!
在线等高手!

解决方案 »

  1.   

    if(row["BirthDay"]!=DBNull.Value)
    {
        user.BirthDay = (DateTime)row["BirthDay"];
    }
      

  2.   


    如果你在定义数据库表的字段类型是就是指定日期时间类型的,那么你贴的这个顶多算是打印结果,而真实的日期时间只是一种浮点数而已。数据库的日期时间,在.net客户端驱动中通常都会正确转换为日期时间,跟你打印出来的这个格式没有关系。只是像#1楼一样要额外考虑数据库允许字段为NULL的问题(如果你定一个数据库表这个字段不能为NULL,则不用考虑)。
      

  3.   

    如果你的BirthDay字段不是datetime类型,查询语句这样试试,select ...,convert(datetime,BirthDay,120) as BirthDay,..............
      

  4.   

    if(row["BirthDay"]!=DBNull.Value)
    {
       user.BirthDay = (DateTime)row["BirthDay"];
    }
    这个正解,肯定有日期为空或非法日期
      

  5.   


    DateTime birthDay;
    if (DateTime.TryParse(row["BirthDay"],out birthDay))
    {
             user.BirthDay = birthDay;
    }
      

  6.   

    补充一下:查询语句SELECT  Convert(varchar(11),birthday,120) birthday FROM HR_PersonnelInfo
    而且数据库里面的birthday是datetime类型的
      

  7.   

    从数据库里取出来的数据都是object类型的,需要转换一下。
    5楼的代码就是将object类型的数据尝试转换为datetime类型,若成功则返回改值也可以用as关键字来进行转换Datetime birthday = row["BirthDay"] as Datetime; 
    用as运算符的好处就是,如果转换失败则返回null,并不抛出异常信息。
      

  8.   

    as不行的,as是用在引用类型的转换上,
      

  9.   

    够简化了吧?这个不会让你代码抛异常的,如果还想简化
    user.BirthDay=DateTime.Parse(row["BirthDay"]);//这个就保证不了不会给你来个什么异常错误了