检查值是否为DBNull

时间:2013-01-26 01:11:18

标签: asp.net vb.net

我有以下功能:

Public Shared Function imageExists(ByVal path As Object) As Boolean
                If IsDBNull(path) = False Or Not path Is Nothing Then
                    Dim pathString As String = Convert.ToString(path)
                    If Exists(HttpContext.Current.Server.MapPath(path)) Then
                        Return True
                    Else
                        Return False
                    End If
                Else
                    Return False
                End If

            End Function

由此图像控件的visible属性调用:

<asp:Image ID="img_SmallImage" runat="server" ImageUrl='<%# "~/Content/Images/Exclusive/" + Eval("trip_SmallImage") %>' Visible='<%# OnTheMain.Images.Validation.imageExists(Eval("trip_SmallImage"))%>' />

无论我为If IsDBNull部分尝试什么,它都会忽略它并执行代码,或者返回错误,例如Conversion from type 'DBNull' to type 'String' is not valid.

我该如何纠正这种情况?

3 个答案:

答案 0 :(得分:2)

如果检查,您在第一次出现逻辑错误。

Not Nothing总是评估为true。所以第一个语句基本上编译为:

If IsDBNull(path) Or True Then

总是如此。你的if语句应该是这样的:

If Not IsDBNull(path) And path Is Not Nothing Then

答案 1 :(得分:1)

我不知道为什么你同时使用IsDBNullNothing

使用AndAlso,如果之前为假,则不会检查下一部分

首先检查路径以防止异常:

        If path IsNot Nothing AndAlso IsDBNull(path) = False Then
        'do what ever you want to do
    End If

仅供参考,OrElse将对Or执行相同的功能,对我来说,我正在使用此短路逻辑运算符,默认情况下请阅读此问题here

答案 2 :(得分:0)

使用

If Not String.IsNullOrEmpty(path) Then

因为你需要处理空字符串。您应该传递一个String,而不是一个通用的Object。另外,你不能Or Not Nothing。你必须做Not IsDBNull(path) And Not path Is Nothing