Я получаю это исключение из следующего кода VB.NET только на определенные месяцы:
System.InvalidCastException: Conversion from type 'DBNull' to type 'Date' is not valid.
Это происходит на линии:
If CDate(dRow("CompleteDate")).ToString("d") = arrWeekYear(i, 1).ToString("d") Then
Если я правильно понимаю, проблема в том, что я пытаюсь сравнить некоторые значения NULL для CompleteDate со значением, отличным от NULL.
Как мне это исправить? Для некоторых дат этот код выше работает отлично. Однако для некоторых более поздних записей это не так. Но я могу получить вывод из запроса T-SQL с тем же диапазоном дат, и нет никаких ошибок; это бежит также быстро. И я исследовал этот запрос T-SQL для значений NULL «Date_Completed» и «Review_Date», но в любом случае «CompleteDate» всегда был = NON-нулевое значение. Поэтому я не понимаю, как это происходит.
Вот мой запрос 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"
Когда я добавляю эту строку выше строки, вызывающей ошибки, мой отчет истекает в течение этих месяцев. Так что же делать?
If Not dRow("CompleteDate") Is System.DBNull.Value Then