在VBScript中检查NULL时出错

时间:2013-01-24 17:47:48

标签: asp-classic vbscript null nullreferenceexception nothing

我在经典ASP页面中有以下VBScript:

function getMagicLink(fromWhere, provider)
    dim url 
    url = "magic.asp?fromwhere=" & fromWhere
    If Not provider is Nothing Then ' Error occurs here
        url = url & "&provider=" & provider 
    End if
    getMagicLink = "<a target='_blank' href='" & url & "'>" & number & "</a>"
end function

我在If Not provider Is Nothing Then

的行上不断收到“Object Required”错误消息

值是NULL,还是非NULL,为什么我会收到此错误?

编辑:当我调用对象时,我传入NULL,或者传入一个字符串。

3 个答案:

答案 0 :(得分:34)

从您的代码中看,provider是变体或其他变量,而不是对象。

Is Nothing仅用于对象,但稍后您说它是一个值应为NULL或NOT NULL,由IsNull处理。

尝试使用:

If Not IsNull(provider) Then 
    url = url & "&provider=" & provider 
End if

或者,如果这不起作用,请尝试:

If provider <> "" Then 
    url = url & "&provider=" & provider 
End if

答案 1 :(得分:20)

我在评论中看到很多混乱。 NullIsNull()vbNull主要用于数据库处理,通常不在VBScript中使用。如果在调用对象/数据的文档中没有明确说明,请不要使用它。

要测试变量是否未初始化,请使用IsEmpty()。要测试变量是否未初始化或包含"",请在""Empty进行测试。要测试变量是否为对象,请使用IsObject并查看此对象是否在Is Nothing上没有参考测试。

在您的情况下,您首先要测试变量是否为对象,然后查看该变量是否为Nothing,因为如果它不是对象,则在获取“Object Required”错误时你在Nothing上进行测试。

要在代码中混合和匹配的代码段:

If IsObject(provider) Then
    If Not provider Is Nothing Then
        ' Code to handle a NOT empty object / valid reference
    Else
        ' Code to handle an empty object / null reference
    End If
Else
    If IsEmpty(provider) Then
        ' Code to handle a not initialized variable or a variable explicitly set to empty
    ElseIf provider = "" Then
        ' Code to handle an empty variable (but initialized and set to "")
    Else
        ' Code to handle handle a filled variable
    End If
End If

答案 2 :(得分:1)

我将在变量的末尾添加一个空格(“”)并进行比较。即使该变量为null,下面的内容也应该有效。您也可以在空格的情况下修剪变量。

If provider & "" <> "" Then 
    url = url & "&provider=" & provider 
End if