我正在尝试重用我一直使用的相同代码,但现在遇到错误。
我正在遍历各种用户表,并在其中执行以下操作:
DateTime dcdt = (DateTime)u.DateCreated;
DateTime lldt = (DateTime)u.LastLogon;
userRow["DateCreated"] = dcdt.ToShortDateString();
在循环中。我收到错误:
System.InvalidOperationException: Nullable object must have a value.
错误突出显示“lldt”行,而不是第一个出现的“dcdt”。这本身就很奇怪。检查数据库中的这两个字段“允许空值”。它们都可以为空,也可以都不为空。
这两个值都列为DateTime?通过智能感知类型。
我不明白为什么 ASP.NET 拒绝让我为空日期输出空白。如果它为空/null,那么逻辑上会建议 ASP.NET 应该不打印任何内容。
我还应该如何输出空日期?我尝试添加 if 语句以防止尝试强制转换 null DateTimes,但这没有帮助,没有任何意义。
最佳答案
如您所说,u.LastLogon
的数据类型是DateTime?
。这意味着它可能有也可能没有值(value)。通过转换为 DateTime
,您需要它具有一个值。在这种情况下,它不会。
根据您要对其执行的操作,您可能需要检查 HasValue
属性:
userRow["LastLogon"] = u.LastLogin.HasValue ?
(object) u.LastLogin.ToShortDateString() : DBNull.Value;
如果你的数据库 LastLogon
列是 DateTime 类型,那么你应该可以这样做:
userRow["LastLogon"] = u.LastLogin.HasValue ?
(object) u.LastLogin.Value : DBNull.Value;
关于c# - 可空对象必须有一个值#2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8749164/