0

我已经在这里通过了各种答案,但没有一个给出真正有效的答案。核心问题(显然)是 DateTime 没有任何 NULL 的概念,所以通常

string dateValue = myReader.IsDBNull (4) ? null : myReader.GetDateTime(4) ;

不起作用。

我试过了

DateTime? nextDue = myReader.GetDateTime(3) == DBNull.Value ? null : (DateTime?)myReader.GetDateTime (3) ;

但这给了

Operator '==' cannot be applied to operands of type 'System.DateTime' and 'System.DBNull'

更改为

DateTime? nextDue = myReader.GetDateTime(3) = DBNull.Value ? null : (DateTime?)myReader.GetDateTime (3) ;

生产

Cannot implicitly convert type 'System.DBNull' to 'bool'

我最终将 SQL 更改为不输出 NULL 值,但我仍然想破解这个,因为它将在其他地方有用

4

5 回答 5

1

你可以试试

DateTime? nextDue = myReader.IsDbNull(3) ? null : (DateTime?) myReader.GetDateTime (3)
于 2013-01-30T13:08:43.560 回答
1

首先你的语法在这里:

DateTime? nextDue = myReader.GetDateTime(3) = DBNull.Value ? null : (DateTime?)myReader.GetDateTime (3) ;

身份证错了 应该:

DateTime? nextDue = myReader.GetDateTime(3) == DBNull.Value ? null : (DateTime?)myReader.GetDateTime (3) ;

其次,您可以使用:

DateTime? nextDue = myReader.IsDBNull(3) ? null : (DateTime?)myReader.GetDateTime (3) ;
于 2013-01-30T13:09:31.223 回答
0

尝试

  DateTime? nextDue = myReader.GetValue(3) == DBNull.Value ? null : (DateTime?)myReader.GetDateTime (3);
于 2013-01-30T13:08:23.957 回答
0

只需使用:

DateTime? nextDue;
if (myReader.GetDateTime(3) == DBNull.Value)
    nextDue = myReader.GetDateTime(3);
else
    nextDue = null;

或者:

DateTime? nextDue;
if (myReader.IsDBNull(3))
    nextDue = myReader.GetDateTime(3);
else
    nextDue = null;
于 2013-01-30T13:06:16.063 回答
0

您需要将其null转换为DateTime?

DateTime? nextDue = myReader.IsDBNull(3) ? 
    null as DateTime? : 
    (DateTime?)myReader.GetDateTime (3) 
于 2013-01-30T13:06:57.923 回答