3

我正在从存储过程返回结果并将它们传递给函数以进行进一步处理。在某些情况下,其中一个字段(日期值)可能(并且非常好)返回 null。

但是,每当我将 null 传递给函数时,都会引发异常,试图将 null 转换为函数参数的类型。处理这个问题的最佳方法是什么?

数据:

Name    StartDate    EndDate
Bob     01/01/2013   NULL

调用函数:

MyFunction(
           DataRow.Item("StartDate"), 
           DataRow.Item("EndDate")) ' <--- invalid cast exception

功能:

Public Function MyFunction(
                           ByVal StartDate as Date, 
                           ByVal EndDate as Date) As Object
    ....
    Return something
End Function

编辑:很多很棒的提示,但仍然没有骰子。

将函数中的 DateTime 类型声明为可为空ByVal EndDate as DateTime?,会导致System.InvalidCastException: Specified cast is not valid.

使用 DataRow.Field(Of DateTime)("EndDate") 以及将参数声明为可为空的类型会导致System.InvalidCastException: Cannot cast DBNull.Value to type 'System.DateTime'

EDIT2:找到了我的一个问题的根源。我使用的是 Iif(),其中一个值是 System.DBNull 类型,另一个是 Date 类型。并且真假部分必须是同一类型。我花了一段时间才发现这一点。

4

4 回答 4

6

使用可为的DateTime 参数:

 ByVal EndDate AS Nullable(Of DateTime)

完整示例:

Public Function MyFunction(ByVal StartDate as Date, ByVal EndDate as Nullable(Of DateTime)) As Object
    ....
    Return something
End Function
于 2013-09-05T14:54:37.090 回答
1

您尝试可以制作参数Nullable

Public Function MyFunction(ByVal StartDate as DateTime, ByVal EndDate as DateTime?) As Object
    ....
    Return something
End Function

但是您可能需要使用以下Field方法调用它:

MyFunction(DataRow.Field(Of DateTime)("StartDate"), DataRow.Field(Of DateTime?)("EndDate")) 
于 2013-09-05T14:55:01.907 回答
0

您应该考虑为可以为空的值使用可空值。看看这里的例子.... DateTime "null" 值

于 2013-09-05T14:54:19.063 回答
0

从数据库方面,您可以空检查日期时间并分配任何日期,例如“1/1/1990”

于 2013-09-05T14:56:16.180 回答