我用数据库中的结果通过sqlDataReader填充我的对象,如下所示:
foreach (DataRow dr in dt.Rows)
{
wt = new WorkTasksDto
{
CompletedBy = dr.IsNull("CompletedBy") ? (DateTime?)null : (DateTime?)dr["CompletedBy"]
};
}
正如您可以看到我正在检查DbNUll,但我的日期字段的一条记录是空白的。不是null,就像一个空的varchar字段,当我尝试进行我的DateTime强制转换时,我得到一个无效的强制转换错误。
如何检查空白字段以及DbNull字段?
答案 0 :(得分:1)
不是很干净,但这似乎有效。
foreach (DataRow dr in dt.Rows)
{
DateTime myDate;
if(dr.IsNull("CompletedBy"))
myDate = DateTime.MinValue;
else
{
if(DateTime.TryParse(dr["CompletedBy"].ToString(), out myDate) == false)
myDate = DateTime.MinValue;
}
wt = new WorkTasksDto
{
CompletedBy = (myDate == DateTime.MinValue ? null : myDate);
};
}
答案 1 :(得分:1)
如果列类型为DateTime
,则值不能为“空白”。
如果列类型为string
,则应检查null和空白,然后解析值而不是强制转换:
CompletedBy = dr["CompletedBy"] == null || dr["CompletedBy"] == "" ?
null :
DateTime.Parse(dr["CompletedBy"], CultureInfo.InvariantCulture);
如果您知道有其他值不是空白而无法解析为DateTime
使用TryParse
如果列类型为object
并且您混合了不同的类型,则需要首先验证类型而不是强制转换。
CompletedBy = dr["CompletedBy"] != null && dr["CompletedBy"] is DateTime ?
(DateTime)dr["CompletedBy"] :
null;
答案 2 :(得分:0)
使用DateTime.TryParse()
http://msdn.microsoft.com/en-us/library/system.datetime.tryparse.aspx
DateTime completedDate;
DateTime.TryParse(reader["CompletedDate"].ToString(), out completedDate);
if(completedDate == DateTime.MinValue)
{
}