Dex*_*ter 5 c# sql-server asp.net sql-server-2008
我正在尝试重用我一直使用的相同代码,但现在它遇到了错误.
我循环遍历各种用户表,在那里我这样做:
DateTime dcdt = (DateTime)u.DateCreated;
DateTime lldt = (DateTime)u.LastLogon;
userRow["DateCreated"] = dcdt.ToShortDateString();
Run Code Online (Sandbox Code Playgroud)
在循环内.我收到错误:
System.InvalidOperationException: Nullable object must have a value.
Run Code Online (Sandbox Code Playgroud)
该错误突出显示"lldt"行,而不是首先出现的"dcdt".这本身就很奇怪.检查数据库"允许空值"中的这两个字段.它们都可以为null或两者都不为null.
这两个值都列为DateTime?通过intellisense的类型.
我不明白为什么ASP.NET拒绝允许我为空日期输出空白.如果它为空/ null,则逻辑会建议ASP.NET不应该只打印任何内容.
我怎么想输出空日期呢?我尝试添加if语句以防止尝试转换null DateTimes,但它没有帮助,这没有任何意义.
Joh*_*ers 12
正如你所说,数据类型u.LastLogon是DateTime?.这意味着它可能有也可能没有价值.通过强制转换DateTime,您需要它具有值.在这种情况下,它没有.
根据您尝试使用它的方式,您可能需要检查HasValue属性:
userRow["LastLogon"] = u.LastLogin.HasValue ?
(object) u.LastLogin.ToShortDateString() : DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
如果您的数据库LastLogon列是DateTime类型,那么您应该能够:
userRow["LastLogon"] = u.LastLogin.HasValue ?
(object) u.LastLogin.Value : DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21679 次 |
| 最近记录: |