从“ DBNull”类型到“日期”类型的转换无效

use*_*819 4 vb.net exception

我仅在某些月份从以下VB.NET代码中得到此异常:

System.InvalidCastException: Conversion from type 'DBNull' to type 'Date' is not valid.
Run Code Online (Sandbox Code Playgroud)

它发生在行上:

If CDate(dRow("CompleteDate")).ToString("d") = arrWeekYear(i, 1).ToString("d") Then
Run Code Online (Sandbox Code Playgroud)

如果我正确理解这一点,那么问题是我正在尝试将CompleteDate的一些NULL值与非NULL值进行比较。

我该如何解决?对于某些日期,上面的代码可以完美运行。但是,对于一些较新的记录,事实并非如此。但是我可以从具有相同日期范围的T-SQL查询中获取输出,并且没有错误;它也运行很快。我检查了该T-SQL查询中的“ Date_Completed”和“ Review_Date” NULL值,但是无论哪种方式,“ CompleteDate”始终为NON-Null值。所以我不明白这是怎么发生的。

这是我的VB.NET查询:

            commandstring = "SELECT Batch_Records.Part_Number, Batch_Records.Lot_Number, Batch_Records.Date_Received, " & _
                "IsNull([Date_Completed], [Review_Date]) AS [CompleteDate], Batch_Records.Error, " & _
                "Batch_Records.[Group], Batch_Records.MFG, Batch_Records.MFG2, Batch_Records.QC, Batch_Records.QC2, " & _
                "QC_CODES.CODE_DESC, DATEADD(DD, 1 - DATEPART(DW, Batch_Records.Date_Received), Batch_Records.Date_Received) AS SundayDate " & _
                "FROM EXCEL.Batch_Records LEFT JOIN EXCEL.QC_CODES ON Batch_Records.Part_Number = QC_CODES.CODE_ID " & _
                "WHERE (Batch_Records.[Group]" & TheGroup & " AND Batch_Records.Date_Received > '" & FirstWeek & "' AND Batch_Records.Date_Received < dateadd(Day, 1, '" & LastWeek & "'))" & _
                   "ORDER BY Batch_Records.Date_Received"
Run Code Online (Sandbox Code Playgroud)

当我将此行添加到上面的导致错误的行上方时,我的报告在这几个月中都超时了。那么该怎么办?

If Not dRow("CompleteDate") Is System.DBNull.Value Then
Run Code Online (Sandbox Code Playgroud)

age*_*t-j 5

在询问值之前,请使用dRow.IsNull(“ CompleteDate”)检查是否为空。

或者,如果“不可能”执行此操作,请将查询更改为从不返回可以为null的行。