将日期时间转换为字符串

时间:2011-10-09 07:07:26

标签: c#

Howsit!

我在datareader中获取空值时遇到错误。

public List<Complaint> View_all_complaints()
{
    csDAL objdal= new csDAL();
    List<Complaint> oblcomplist=new List<Complaint>();

    using( IDataReader dr=objdal.executespreturndr("View_all_complaints"))
    {
        while (dr.Read())
        {
            Complaint objcomp= new Complaint();
            populate_reader(dr,objcomp);
            oblcomplist.Add(objcomp);
        }
    }
    return oblcomplist;
}

public void populate_reader(IDataReader dr, Complaint objcomp)
{
    objcomp.ref_num = dr.GetString(0);
    objcomp.type = dr.GetString(1);
    objcomp.desc = dr.GetString(2);
    objcomp.date = dr.GetDateTime(3);
    objcomp.housenum = dr.GetInt32(4);
    objcomp.streetnum = dr.GetInt32(5);
    objcomp.status = dr.GetString(6);
    objcomp.priority = dr.GetString(7);
    objcomp.cid = dr.GetInt32(8);
    if (!dr.IsDBNull(9))
    {
        objcomp.resolved_date = dr.GetDateTime(9);
    }
}
在SQL解析日期中

允许空值,这是因为只有在投诉得到解决时,它必须反映该日期,否则它应该为空。

如果dr.getdatetime(9)为null,则必须设置一个字符串“Not Resolved”

请帮忙!

2 个答案:

答案 0 :(得分:2)

您尚未显示Complaint类似的内容,但基本上您需要确保其resolved_date的类型为DateTime?,而Nullable<DateTime>。这样您就可以优雅地建模缺失值。

至于显示它 - 您没有显示有关显示数据的位置的任何信息,但您需要以下内容:

string text = complaint.ResolvedDate.HasValue ? complaint.ResolvedDate.ToString()
                                              : "Not Resolved";

(我已将此更改为同时使用具有惯用名称的属性...)

答案 1 :(得分:1)

IDataReader有一个“IsDBNull”方法,应该在调用GetXXX()之前调用,以防你的值不可为空。

例如:

objcomp.date = dr.GetDateTime(3); 

应该是:

objcomp.date = dr.IsDBNull(3) ? DateTime.MinValue : dr.GetDateTime(3);