Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未将字符串识别为有效的日期时间_C#_Sql_Asp.net_.net Core - Fatal编程技术网

C# 未将字符串识别为有效的日期时间

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

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

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"])