C# 未将字符串识别为有效的日期时间
我有一个存储过程,它为结果中的日期列返回NULL和正确的日期值。 但是,在转换结果中的空值时,出现错误“字符串未被识别为有效的日期时间”。其他正确的日期值正在转换中C# 未将字符串识别为有效的日期时间,c#,sql,asp.net,.net-core,C#,Sql,Asp.net,.net Core,我有一个存储过程,它为结果中的日期列返回NULL和正确的日期值。 但是,在转换结果中的空值时,出现错误“字符串未被识别为有效的日期时间”。其他正确的日期值正在转换中 var dataList = new List<Model>(); while (sqlDataReader != null && await sqlDataReader.ReadAsync()) { dataList.Add(new Model { MyDate = Da
var dataList = new List<Model>();
while (sqlDataReader != null && await sqlDataReader.ReadAsync())
{
dataList.Add(new Model
{
MyDate = DateTime.Parse(sqlDataReader["DateColumn"].ToString()),
});
}
SP返回的值类似于
NULL
2019-01-28
试试这个:
MyDate = sqlDataReader["DateColumn"] == DBNull.Value
? null
: (DateTime?)sqlDataReader["DateColumn"]
如果您的列是有效的DATE SQL列,则应将其转换为DateTime
你一定要检查一下。也可以使用或方法来完成
如果您的存储过程出于某种奇怪的原因将“DateColumn”中的日期和空值转换为(n)varchar,您可以尝试以下代码:
MyDate = sqlDataReader["DateColumn"] == DBNull.Value
||
sqlDataReader["DateColumn"] == "NULL"
? null
: (DateTime?)DateTime.Parse((string)sqlDataReader["DateColumn"])
DateTime.Parse(sqlDataReader[“DateColumn”].ToString()的值是多少。如果sqlDataReader[“DateColumn”]为NULL,则DateTime.Parse将失败。sqlDataReader[“DateColumn”]可以同时具有NULL值和2019-01-28值。任何方法都可以使其同时适用于这两个值?NULL sqlDataReader[“DateColumn”].ToString()返回字符串'null',您最好处理sqlDataReader[“DateColumn”]=DbNull.value?默认日期:sqlDataReader[“DateColumn”]…我假设您的列字符串类型如果它是
日期
,结果已经是日期时间
,或者它是DBNull.Value
。无需在字符串中来回跳转,特别是因为日期格式取决于区域设置。根据您的C版本,有更多和更少优雅的写入方式在这个测试中,我只是使用Dapper,而不是像这样编写样板文件。空值的相同错误是NULL
,在这种情况下,它是DBNull.Value
,并且将其转换为DateTime?
将失败。DbDataReader
来自一个更无辜的时代,那里不存在NULL
,这就是为什么有一个单独的.IsDBNull
方法。@OlexanderIvanitskyi否luck@st1612这次有什么错误?同一个错误字符串未被识别为有效的DateTime
MyDate = sqlDataReader["DateColumn"] == DBNull.Value
||
sqlDataReader["DateColumn"] == "NULL"
? null
: (DateTime?)DateTime.Parse((string)sqlDataReader["DateColumn"])