La Conversion de type DBNull de type 'Date' n'est pas valide

Je reçois cette exception suivante VB.NET code pour seulement certains mois:

System.InvalidCastException: Conversion from type 'DBNull' to type 'Date' is not valid.

Il arrive sur la ligne:

If CDate(dRow("CompleteDate")).ToString("d") = arrWeekYear(i, 1).ToString("d") Then

Si je comprends bien, le problème c'est que je suis en train de comparer des valeurs NULL pour CompleteDate à une valeur non NULLE.

Comment puis-je résoudre ce problème? Pour certaines dates, le code ci-dessus fonctionne parfaitement. Cependant, pour certains des plus récents enregistrements, il ne le fait pas. Mais je suis en mesure d'obtenir la sortie de la requête T-SQL avec la même plage de date et il n'y a pas d'erreurs; il s'exécute rapidement aussi. Et j'ai examiné cette requête T-SQL pour les deux "Date_Completed" et "Review_Date" les valeurs NULL, mais de toute façon, "CompleteDate" a toujours été = valeur NON Null. Donc je ne comprends pas comment cela se passe.

Voici mon VB.NET requête:

            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"

Quand j'ai ajouter cette ligne au-dessus de l'erreur causant la ligne ci-dessus, mon rapport pour ces mois. Alors, que faire?

If Not dRow("CompleteDate") Is System.DBNull.Value Then
NOOOON!! Ne pas utiliser la concaténation de chaîne de valeurs de substitution dans vos requêtes! Ne pas le faire!
Il est vrai, avec ce code, vous pouvez facilement sql injectée !!!
Dans votre requête, est EXCEL le schéma, ou vous joindre à l'encontre d'une feuille excel en quelque sorte? Ou avons-nous affaire à SQL?
Quel est le type de données de l'CompleteDate de la colonne?
+1 à David pour expliquer pourquoi c'est mauvais!!!

OriginalL'auteur user371819 | 2011-07-14