日期:2014-05-16  浏览次数:21154 次

请问如果判断conn对象是否为空?用了N年的If conn <> Null Then conn.close 居然发现不对
请看下面最简单的例子 conn.asp

connstr="Provider=SQLOLEDB;Data Source=(local);Persist Security Info=True;Initial Catalog=dafei_db;User ID=sa;Password=123456"
set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr

sub CloseConn()
If conn <> Null Then 
conn.close : set conn=Nothing
response.write("Conn不为空<br>")
Else
response.write("Conn为空<br>")
End If
end sub

CloseConn()

这个方式用了N年了,程序中要关闭conn时一般都调用 CloseConn()
结果上面加了注释后才发现,如果用了 If conn <> Null 后根本就不执行 conn.close
大家可以运行下上面这段代码,发现跟本就不走conn.close 这段, 输出结果为:“Conn为空”

但是 如果不加 If conn <> Null Then conn.close 这种写法,有时候在程序中还报错,
请问各位高手是如何解决这问题的?
为什么前面明明已经 set conn=server.createobject("ADODB.CONNECTION")了,判断的话 
conn还是为空?
到底怎么样写才能有效的保证能关闭conn连接?
非常感谢。

------解决方案--------------------

If conn.State = 1 Then
    conn.Close()
    Set conn = Nothing
End If

------解决方案--------------------
If Not conn Is Nothing Then
   If conn.State <> 0 Then conn.Close
End If
Set conn = Nothing
------解决方案--------------------
if not isobject(conn) then