我正在尝试从SQL DB读取数据类型为DateTime但该值为NULL的字段。

DateTime STime = NULL;


C#的接收变量是这个

public Nullable<DateTime> StartTime { get; set; }


当我尝试阅读时:

SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())
{
    StartTime = reader.GetDateTime(7);
}


谁能帮助您从数据库中检索对C#为空的数据?

最佳答案

如果对GetDateTime的调用可以返回null,则必须首先


  在调用此方法之前,请调用IsDBNull以检查是否为空值。


http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getdatetime(v=vs.110).aspx

如果IsDBNull返回true,则将StartTime设置为null。

这是相当普遍的情况。我编写了扩展方法以使其更易于处理此模式,例如:

    public static DateTime? GetDateTimeOrNull(this IDataReader reader, int ordinal)
    {
        return reader.IsDBNull(ordinal) ? null : (DateTime?)reader.GetDateTime(ordinal);
    }


如果您的项目中有该扩展方法,则将进行更改

StartTime = reader.GetDateTime(7);




StartTime = reader.GetDateTimeOrNull(7);


顺便说一句,我建议不要对序数使用硬编码的数字。相反,在开始遍历阅读器之前,请先执行类似int idxTS = reader.GetOrdinal("TheTSColumn");的操作,然后在循环StartTime = reader.GetDateTimeOrNull(idxTS);中进行。这样可以保护您的代码免受更改,例如在查询中添加/删除列。

10-06 13:40