当前位置 : 主页 > 编程语言 > c语言 >

.net – 如何处理将DBNull传递给函数?

来源:互联网 收集:自由互联 发布时间:2021-06-24
我将从存储过程返回结果并将它们传递给函数以进行进一步处理.在某些情况下,其中一个字段(日期值)可能(并且非常精细)返回null. 但是,每当我将null传递给函数时,都会抛出异常,尝试将
我将从存储过程返回结果并将它们传递给函数以进行进一步处理.在某些情况下,其中一个字段(日期值)可能(并且非常精细)返回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为DateTime?,会导致System.InvalidCastException:指定的强制转换无效.

使用DataRow.Field(Of DateTime)(“EndDate”)以及将参数声明为可空类型会导致System.InvalidCastException:无法强制DBNull.Value输入’System.DateTime’

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

您尝试可以创建参数 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"))
网友评论