首页 > 解决方案 > 日期时间对象值为 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;

            }

}

处理此错误的最佳方法是什么,因为无论我使用什么来捕获对象为空,该值似乎都会触发空异常

标签: c#

解决方案


鉴于显示的代码,最可能的情况uploadTracekerDate是非空,并且是一个具有LastImportedDate空 (null) Nullable<DateTime>( DateTime?) 的实例。

这意味着它正在引发异常,因此您需要考虑在is.Value场景中您实际想要做什么,并实现它 - 可能通过在访问.LastImportedDatenullif (uploadTracekerDate.LastImportedDate.HasValue).Value

然而!这很重要:请远离将字符串与值连接以创建 SQL 的方法——由于多种原因,这是一个糟糕的主意;在这种情况下,最可能的问题是 i18n 的语言环境问题,但同样的方法也可能导致严重的 SQL 注入问题。尽可能(几乎总是):首选 SQL 参数。


推荐阅读