asp-classic - 测试对象是否为空会导致 'Object required'错误

标签 asp-classic vbscript

我正在支持一些经典的ASP页,其中一个使用并重复使用对象 conn 并在.asp页完成处理时或在将页面重定向到另一页之前将其处置。

<%
dim conn
...
set conn = server.CreateObject("adodb.connection")
...
sub cleanUp()
    conn.Close
    set conn = nothing
end sub
...
sub pageRedirect(url)
    call cleanUp()
    response.Redirect url : response.End
end sub
...
' very end of file
call cleanUp()%>

我发现如果存在重定向,则会在conn.Close行得到服务器错误,这是Microsoft VBScript运行时错误'800a01a8'所需的对象。我认为没有理由为什么该行将执行多次,但是为了安全起见,我重写了该函数
sub cleanUp()
    if(not (conn Is Nothing)) then
        conn.Close
        set conn = Nothing
    end if
end sub

但是我仍然得到那个确切的错误,现在在if(not (conn Is Nothing))行!我以为Is Nothing的目的是在使用变量名称conn之前进行测试,以防止该“需要对象”错误,但是该测试抛出相同的错误。

如果已将conn设置为Nothing,我还可以使用什么其他测试来确保未引用conn?

最佳答案

is nothing用于测试对象引用,如果变量不包含此类引用,则测试无效并引发错误,因此conn仅在将set转换为某种东西后才能进行测试。

你可以;

if isobject(conn) then
   if not (conn Is Nothing) then set conn = nothing
end if

关于asp-classic - 测试对象是否为空会导致 'Object required'错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9670120/

相关文章:

asp-classic - 经典 ASP : On Error Stop

arrays - 检查 vbscript/classic asp 中的任何内容

vbscript - 是否可以在不使用临时文件的情况下在批处理文件中嵌入和执行 VBScript?

c# - C# 中缓慢的 AD 属性检索

arrays - 如何检查vbscript中数组中的变量

html - asp session 超时无法正常工作

vbscript - 使用 VBScript 在 Excel 中查找列的底部

security - "50289 Can' t 执行操作,因为项目受到保护”但是为什么?

windows - vbscript 输出到控制台

javascript - 将值转换成十进制