c# - 日期时间对象值为 null 但值仍然抛出 null
问题描述
我有一些代码可以检查一个名为上传跟踪器的表,我遇到的问题是,如果存储在数据库中的日期时间的值为 null,它会导致这部分代码崩溃。
using (var db = new SOMEntities1())
{
var uploadTracekerDate = db.UploadTrackers.Where(w => w.TableName == "Stock").FirstOrDefault();
if (uploadTracekerDate != null)
{
string lastUpLoadedDateConvetedTOSage =Convert.ToDateTime(uploadTracekerDate.LastImportedDate.Value.ToString("yyyy-MM-dd");
var stockwhereClause = string.Format(" and STOCK.RECORD_CREATE_DATE >= '{0}'", lastUpLoadedDateConvetedTOSage);
stockwhereClause = stockwhereClause + string.Format(" and STOCK.RECORD_MODIFY_DATE >= '{0}'",
lastUpLoadedDateConvetedTOSage);
sql += stockwhereClause;
}
}
处理此错误的最佳方法是什么,因为无论我使用什么来捕获对象为空,该值似乎都会触发空异常
解决方案
鉴于显示的代码,最可能的情况uploadTracekerDate
是非空,并且是一个具有LastImportedDate
空 (null) Nullable<DateTime>
( DateTime?
) 的实例。
这意味着它正在引发异常,因此您需要考虑在is.Value
场景中您实际想要做什么,并实现它 - 可能通过在访问.LastImportedDate
null
if (uploadTracekerDate.LastImportedDate.HasValue)
.Value
然而!这很重要:请远离将字符串与值连接以创建 SQL 的方法——由于多种原因,这是一个糟糕的主意;在这种情况下,最可能的问题是 i18n 的语言环境问题,但同样的方法也可能导致严重的 SQL 注入问题。尽可能(几乎总是):首选 SQL 参数。
推荐阅读
- swift - 未调用 reportNewIncomingCall 完成
- python-3.x - Python Selenium ().text 返回 "’" 而不是撇号 (')
- python - Python:如何有效地导航 XML 子节点?
- laravel - 有没有一种简单的方法可以添加指向 Botman 回复的链接?
- sql - Select 语句中的 SQL Server 函数和事务死锁
- javascript - $(window).on('load', ...) 在 MS Edge 中发生得太快
- git - 如果拉取请求未合并并且上游/主进程推进,那么理想的 git 工作流程应该是什么
- primefaces - 如何仅在包含特定值时才禁用列的编辑?
- java - 我的程序有没有办法接受短语并以猪拉丁语输出它们?
- python - 从 txt 文件中删除标题的 Python 代码