How to handle passing DBNull into a function?
我将从存储过程返回结果,并将其传递给函数以进行进一步处理。在某些情况下,其中一个字段(日期值)可能返回空值(而且非常好)。
但是,每当我将空值传递给函数时,如果试图将空值转换为函数参数的类型,就会引发异常。最好的方法是什么?
数据:
1 2 | Name StartDate EndDate Bob 01/01/2013 NULL |
调用函数:
1 2 3 | MyFunction( DataRow.Item("StartDate"), DataRow.Item("EndDate")) ' <--- invalid cast exception |
功能:
1 2 3 4 5 6 | Public Function MyFunction( ByVal StartDate as Date, ByVal EndDate as Date) As Object .... Return something End Function |
编辑:很多很好的提示,但仍然没有骰子。
将函数中的日期时间类型声明为可以为空的
使用datarow.field(属于datetime)("enddate")以及将参数声明为可以为空的类型将导致
伊迪丝2:找到了我一个问题的根源。我使用的是iif(),其中一个值的类型为System.DBNull,另一个值的类型为Date。真假部分必须是同一类型。我花了点时间才发现。
使用可为空的日期时间参数:
1 | ByVal EndDate AS Nullable(Of DateTime) |
完整例子:
1 2 3 4 | Public Function MyFunction(ByVal StartDate as Date, ByVal EndDate as Nullable(Of DateTime)) As Object .... Return something End Function |
您可以尝试使参数
1 2 3 4 | Public Function MyFunction(ByVal StartDate as DateTime, ByVal EndDate as DateTime?) As Object .... Return something End Function |
但您可能需要使用
1 | MyFunction(DataRow.Field(Of DateTime)("StartDate"), DataRow.Field(Of DateTime?)("EndDate")) |
从数据库端,您可以空检查日期时间,并分配任何日期,如"1/1/1990"。
对于可以为空的值,应该考虑使用可以为空的值。看看这里举个例子……日期时间"空"值