飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

如何及时关闭对象、数据库连接

Author:Flymorn Source:飘易博客
Categories:数据库 PostTime:2007-11-30 22:48:05
正 文:
    很多站长写程序时,对于已经打开的对象,数据库连接,总是不冷不热,不及时关闭;孰知,系统资源就是这样的被消耗殆尽,导致程序假死,失去响应;尤其对于 response.redirect 转向语句 前后关闭对象、连接,更是模糊不清。

    flymorn以实际测试为例子,以用于一个网站重庆租房网的调试:请注意:response.redirect 后所有的语句都不会执行,可以测试如下:

<%
response.redirect "http://www.023ff.com"
dim fso,fout
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(Server.MapPath("我被执行啦.txt"))
fout.close
%>

    上面这段代码执行后,同目录下将不会出现《我被执行啦.txt》这个文件;如果把response.redirect这行注释掉,就会出现了。这很好的证明了我的想法。

    对于这个问题的处理方法,可以如下处理:
    把response.redirect 语句放最后,中间采用标志符:

<%
...
if (...) then
zz=1 '标志符置位
else
...
end if

''这里写上关闭对象|数据库连接的语句

'转向在这里
if zz=1 then '这句放最后
response.redirect "http://www.023ff.com"
resposne.end
end if
%>

    对于 js 采用的判断跳转,则不影响其后的执行,如:

<%
response.write "<SCRIPT language=JavaScript>alert('返回!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
'response.end '但是如果有这行,则后面的语句不执行

dim fso,fout
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(Server.MapPath("我被执行啦.txt"))
fout.close
%>
作者:Flymorn
来源:飘易博客
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:网站的盈利模式要在建站前想好
下一篇:SEO的误解:请阅读小字印刷体
4条评论 “如何及时关闭对象、数据库连接”
2008-3-21 16:30:54
是的,页面转移前救得关闭
我常把打开和关闭写成函数,调用时候打开,不用时就关闭
2 lynda
2008-8-21 22:30:02
的确是这样的 楼主说得很好,转移页面的命令前必须关闭数据库连接等对象.但是中间采用标志符的方法可不可以再说详细点呢?
3 lynda
2008-8-21 22:43:58
我觉得其实不必做那么复杂 其实可以在response.redirect语句之前就关闭数据库连接;如果response.redirect语句在 IF 语句中,那么:
Set conn=Server.CreateObject....'数据库连接语句
IF..... then
conn.close '关闭连接
set conn=nothing '清空
response.redirect...
end if
conn.close '关闭连接
set conn=nothing '清空
上面的代码,如果要转移页面,那么程序会在转移之前关闭连接;如果不执行转移页面,那么在退出 IF 语句后,会关闭数据库连接.
这是我的看法,清多指教
4 flymorn
2008-8-22 9:12:53
lynda:程序实现的方法是多样的,程序是死的,但人是活人嘛。
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2010 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有 渝ICP备07006361号