数据库中时间字段inTime和OutTime,允许为空,从数据库中获取数据时,如果OutTime没有值,则在bus.OutTime=Convert.ToDateTime(dr["outTime"])时报错,“对象不能从 DBNull 转换为其他类型” public List<BusResordModel> GetAll()
        {
            try
            {                List<BusResordModel> list = new List<BusResordModel>();
                using (SqlDataReader dr = sqlH.ExecuteReader("GetAllBusRecord", CommandType.StoredProcedure, null))
                {
                    while (dr.Read())
                    {                        BusResordModel busM = new BusResordModel();
                        busM.CardNo = dr["cardNo"].ToString();
                        busM.UserName = dr["userName"].ToString();
                        busM.BusNo = dr["busNo"].ToString();
                        busM.BusType = dr["busType"].ToString();
                        try
                        {
                            busM.InTime = Convert.ToDateTime(dr["inTime"]);
                            if (busM.InTime==null)
                            {
                                busM.InTime = Convert.ToDateTime("");
                            }
                        }
                        catch (Exception)
                        {
                        }
                        busM.InAddr = dr["inAddr"].ToString();
                        try
                        {
                            busM.OutTime = Convert.ToDateTime(dr["outTime"]);                            if (busM.OutTime ==Convert.ToDateTime("0001-1-1 0:00:00"))
                            {
                                busM.OutTime = Convert.ToDateTime("");
                            }
                        }
                        catch (Exception)
                        {
                        }
                        busM.OutAddr = dr["outAddr"].ToString();
                        busM.TotalTime = Convert.ToInt32(dr["totalTime"]);
                        busM.Price = dr["price"].ToString();
                        busM.Operater = dr["operater"].ToString();
                        busM.Picture = dr["picture"].ToString();
                        busM.Photo = dr["photo"].ToString();
                        busM.Guid = dr["guid"].ToString();
                        list.Add(busM);
                    }
                    return list;
                }
            }
            catch
            {
                return null;
            }        }

解决方案 »

  1.   

    我自己琢磨着在读取时间字段的时候,出来 判断一下,如果==null,则给一个“”的字符串,但是不好用,数据库里的字段属性为DateTime
      

  2.   

    你转换前,至少要判断一下吧,如果是DBNull,要做一下处理
      

  3.   

    如果为DBNULL则转为datetime.minvalue?
      

  4.   


    if(dr["outTime"]!=null)
    {
    bus.OutTime=Convert.ToDateTime(dr["outTime"]);
    }
      

  5.   


    if(dr["outTime"]!=null)
    {
      busM.OutTime=Convert.ToDateTime(dr["outTime"]);
    }
    else
    {
        busM.OutTime=Convert.ToDateTime("2010-01-01");//设置个默认值啊
    }
      

  6.   


    打断点看,当outTime里没有值时,它会自己读取应该是最小的值 吧“0001-1-1 0:00:00”,然后再继续下去的话还是报那个错
      

  7.   

    它每次读出来的都是不等 于null,啊,它读出来是0001-1-1 0:00:00
    那应该怎么办啊
      

  8.   

    if(dr["outTime"]!=new Datetime(1,1,1))
    {
    busM.OutTime=Convert.ToDateTime(dr["outTime"]);
    }
    else
    {
    busM.OutTime=Convert.ToDateTime("2010-01-01");//设置个默认值啊
    }
      

  9.   

    //有些数据库字段取出来,只判断是不是null是没用的,有可能是DBNull类型
    if(dr["inTime"]==null || dr["inTime"]!==DBNull.Value)
    {
        //如果空就赋默认值
        busM.InTime =DateTime.Now;
    }
    else
    {
        try
       {
         busM.InTime =Convert.ToDateTime(dr["inTime"]);
       }
       catch (Exception)
       {
          //如果错误就赋默认值
          busM.InTime =DateTime.Now;
        }}
      

  10.   


    if(DateTime.Equals(Convert.ToDateTime(dr["outTime"].ToString()),Convert.ToDateTime("0001-1-1 0:00:00"))
    {
      busM.OutTime=Convert.ToDateTime(dr["outTime"]);
    }
    else
    {
        busM.OutTime=Convert.ToDateTime("2010-01-01");//设置个默认值啊
    }
      

  11.   

    class BusResordModel{
        privaite DateTime? _outTime = null;
        public DateTime? outTime { get{....} set{....} }  //使用? 表示此属性允许null值。在程序中可判断: if(outTime.HasValue) outTime.Value.....    .....
    }.......
    object obj = dr["outTime"];
    if(obj != null && obj != DBNull.Value) ....outTime = Convert.ToDateTime(obj);
      

  12.   

    尽量不要用try, 浪费资源,损耗性能。不要设默认值,否则,有可能在程序中产生意想不到的问题。
      

  13.   


    对 变量类型加? 就可以为null 忘记了
      

  14.   

    我实在是等不了了,我把数据库里的变成string类型了,谢谢大家,等我回头再试试,把分给大家均分了啊