【问题标题】:Error checking for NULL in VBScript在 VBScript 中检查 NULL 时出错
【发布时间】:2013-01-08 13:46:30
【问题描述】:

我在经典 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 的行上收到“需要对象”错误消息。

值要么是NULL,要么不是NULL,为什么会出现这个错误?

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

【问题讨论】:

    标签: asp-classic vbscript null nullreferenceexception nothing


    【解决方案1】:

    我将在变量末尾添加一个空白 ("") 并进行比较。即使该变量为空,像下面这样的东西也应该起作用。您还可以修剪变量以防出现空格。

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

    【讨论】:

      【解决方案2】:

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

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

      在您的情况下,您首先要测试变量是否为对象,然后查看该变量是否为Nothing,因为如果它不是对象,则在测试时会出现“需要对象”错误在Nothing

      sn-p 在你的代码中混搭:

      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
      

      【讨论】:

        【解决方案3】:

        从您的代码看来,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
        

        【讨论】:

        • 我尝试使用If Not IsNull(provider) Then,但随后页面在url = url &amp; "&amp;provider=" &amp; provider 行引发了异常。错误提示“未设置对象变量”。
        • 这是一个令人头疼的问题。你是通过vbNullprovider 还是别的什么?
        • 我一直被教导 Nothing 仅用于对象,请尝试传入 vbNullNothing Null 在 VBScript 中。
        • 使用Null,而不是vbNullvbNull 是与VarType 函数一起使用的常量。
        猜你喜欢
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        • 2010-11-20
        • 1970-01-01
        • 2014-07-21
        相关资源
        最近更新 更多