在数据访问层:           Basic_User Turn(SqlDataReader mydr)
        {
            return new Basic_User((string)mydr["userid"], (string)mydr["password"],(DateTime)mydr["birthday"]
        }
传入mydr读取数据,如果birthday字段有日期型的值   上面的代码没有任何问题,如果在birthday字段为NULL,就会出现“指定的转换无效”的错误。 
我的表设计是birthday字段允许空。 
在不改动表结构的情况下如何解决这个转换问题?

解决方案 »

  1.   

    实体曾代码:
    public class Basic_User
        {
            public Basic_User()
            {}
            public Basic_User(string _userid,string _password,DateTime _birthday)
             {
                
                this._userid=_userid;
                this._password=_password;
                this._birthday = _birthday;
             }         private string _userid;
         private string _password;
             private DateTime _birthday;
                public string UserId
            {
                set{ _userid=value;}
                get{return _userid;}
            }
            public string PassWord
            {
                set{ _password=value;}
                get{return _password;}
            }
                       public DateTime Birthday
            {
                set{ _birthday=value;}
                get{return _birthday;}
            }
      

  2.   


    //读取的时候要先判断的:string userID="";
    if (!Convert.IsDBNull(mydr["userid"]))
    userID=mydr["userid"].ToString();
      

  3.   

    Basic_User
    再写其它的条件就可以了。
      

  4.   


    .net2.0
    DateTime? _birthday.net 1.1set 
    {
    ((_birthday==DBNull.Value)||(_birthday==null))?DateTime.MinValue:_birthday

      

  5.   

      先判断不为null时,再转换.二楼的方法可行
      

  6.   

    声明成DateTime?   _birthday 我是过了还是会出现 “指定的转换无效”错误
    public class Basic_User
        {
            public Basic_User()
            {}
            public Basic_User(string _userid,string _password,DateTime? _birthday)
             {
                
                ....
                this._birthday = _birthday;
             }
              ......
              private DateTime? _birthday;
               public DateTime? Birthday
            {
                set{ _birthday=value;}
                get{return _birthday;}
            }         Basic_User Turn(SqlDataReader mydr)
            {
                return new Basic_User((string)mydr["userid"], (string)mydr["password"],(DateTime?)mydr["birthday"]
            }
      

  7.   

    这两天一直在找实体层 类型转换的方法,发现遇到这个问题的人真的不少。
    大体上找到两个方法
    1、在.net2.0可以用  DateTime?   _birthday声明DateTime类型。 (不知道为什么我声明成DateTime?类型还是不管用仍然出现:指定的转换无效”的错误)
    2、用一个取不到的值(System.DateTime.MaxValue或System.DateTime.MinValue)代替NULL。
    不知道大家还有没有什么好的方法???
      

  8.   

    [code=C#]   Basic_User Turn(SqlDataReader mydr)
            {
                return new Basic_User((string)mydr["userid"], (string)mydr["password"],string.IsNullOrEmpty(mydr["birthday"].ToString())?"":Convert.ToDateTime(mydr["birthday"].ToString())
            }code]
      

  9.   

    楼上的报错:错误 1 无法确定条件表达式的类型,因为“string”和“System.DateTime”之间没有隐式转换 D:\Code\Projects\GraduateDesign\FinalWork\UFIDA\SQLServer\Login_SQL.cs 51 232 SQLServer
      

  10.   

    Basic_User Turn(SqlDataReader mydr)
            {
                return new Basic_User((string)mydr["userid"], (string)mydr["password"],
    mydr["birthday"].tostring()==""?null:(DateTime)mydr["birthday"]
            }