c# - 可空对象必须有一个值#2

标签 c# asp.net sql-server sql-server-2008

我正在尝试重用我一直使用的相同代码,但现在遇到错误。

我正在遍历各种用户表,并在其中执行以下操作:

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/

相关文章:

html - 如何将预定义样式分配给 asp :BulletedList link

c# - 如何在 Gridview 中使用单个 LinkBut​​ton 来更新 aspx 页面上其他位置的 TextBox

sql - SQL Server 2008日志截断是否会暂停事务

c# - 允许在事务运行时选择

c# - 在 Entity Framework 6 中映射 HasOptional().WithOptionalDependent() 关系中的外键

c# - Azure服务总线队列触发函数未被调用

c# - 使用 ASP.NET MVC3 处理注册向导的正确方法是什么?

c# - 在 Microsoft.Graph 客户端中查询组成员时出现异常

c# - 不加载发回的表单值?

sql-server - T-SQL : What is NOT(1=NULL)?