首页 > 解决方案 > 字符串未被识别为有效的 DateTime

问题描述

我有一个存储过程,它为结果中的 DATE 列返回 NULL 和正确的 Date 值。但是,在转换结果中的 NULL 值时,我收到错误“字符串未被识别为有效日期时间”。其他正确的日期值转换得很好。

var dataList = new List<Model>();
while (sqlDataReader != null && await sqlDataReader.ReadAsync())
{
    dataList.Add(new Model
    {
        MyDate = DateTime.Parse(sqlDataReader["DateColumn"].ToString()),
    });
}

下面是模型——

public class AgreementTrackingReportViewModel
{
    public DateTime? MyDate { get; set; }
}

SP返回值如

NULL
2019-01-28

标签: c#sqlasp.net.net-core

解决方案


试试这个:

MyDate = sqlDataReader["DateColumn"] == DBNull.Value
    ? null
    : (DateTime?)sqlDataReader["DateColumn"]

如果您的列是有效的 DATE SQL 列,则应将其转换为 DateTime。

确保检查DBNull.Value. 也可以用Convert.IsDBNullorSqlDataReader.IsDBNull方法来完成。

如果您的存储过程出于某种奇怪的原因将“DateColumn”中的日期和 NULL 转换为 (n)varchar,您可以尝试以下代码:

MyDate = sqlDataReader["DateColumn"] == DBNull.Value
         ||
         sqlDataReader["DateColumn"] == "NULL"
    ? null
    : (DateTime?)DateTime.Parse((string)sqlDataReader["DateColumn"])

推荐阅读