我已经用这个回答了这里的各种答案,但没有一个给出真正有效的答案。核心问题(显然)是DateTime没有任何NUL的概念,所以通常
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 值,但我仍然想破解这个,因为它在其他地方很有用
你可以
试试
DateTime? nextDue = myReader.IsDbNull(3) ? null : (DateTime?) myReader.GetDateTime (3)
首先,
您的语法在这里:
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) ;
只需使用:
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;
您需要将null
转换为DateTime?
:
DateTime? nextDue = myReader.IsDBNull(3) ?
null as DateTime? :
(DateTime?)myReader.GetDateTime (3)
试试
DateTime? nextDue = myReader.GetValue(3) == DBNull.Value ? null : (DateTime?)myReader.GetDateTime (3);