【发布时间】:2011-10-05 12:29:27
【问题描述】:
我仅在某些月份从以下 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
如果我理解正确,那么问题是我试图将 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"
当我在上面导致错误的行上方添加此行时,我的报告在这几个月内超时。那么该怎么办呢?
If Not dRow("CompleteDate") Is System.DBNull.Value Then
【问题讨论】:
-
不!不要使用字符串连接将值替换到您的查询中! 别这样!
-
他是对的,用这段代码你可以很容易地被sql注入!!!
-
在您的查询中,
EXCEL是架构,还是您以某种方式加入了 Excel 工作表?还是我们只处理 SQL? -
CompleteDate 列的数据类型是什么?
-
+1 给大卫解释 why it's so bad!!!