c#获取并设置访问者日期时间

时间:2012-10-17 16:46:12

标签: c# asp.net

我收到的属性中检测到无法访问的代码。这适用于常规字符串字段,但不适用于DateTime数据类型。

private DateTime m_RenewalDate;
    public DateTime M_RenewalDate
            {
                get { return m_RenewalDate != null ? m_RenewalDate : DateTime.MinValue; }
                set { m_RenewalDate = value; }
            }

这是我的sqldatareader

reader.GetDateTime(reader.GetOrdinal("M_RENEWALDATE"))

3 个答案:

答案 0 :(得分:10)

DateTime是值类型,不能为null。因此,getter中的代码无法访问:

return m_RenewalDate != null ? // always evaluates to true
       m_RenewalDate :         // and therefore always returns this
       DateTime.MinValue;      // The code never hits this case.

如果数据库中的字段可以为null,或许您希望将该属性声明为可为空的DateTime:DateTime?

答案 1 :(得分:1)

DateTime是值类型,不能为null。要与数据库中的空值进行比较,请使用DBNull.Value

答案 2 :(得分:0)

正如driis在他的回答中所说,m_RenewalDate == null总是假的,因为DateTime是一个值类型,声明为值类型的东西不能为空。

要让get DateTime.MinValue从[{1}}返回M_RenewalDate的行为,M_RENEWALDATE null,您的读者代码应该更像这样< / p>

object renewalDate = reader.GetValue(reader.GetOrdinal("M_RENEWALDATE"));

if (Equals(renewalDate, DBNull.Value))
{
    yourObject.M_RenewalDate = DateTime.MinValue;
}
else
{
    yourObject.M_RenewalDate = (DateTime) renewalDate;
}