濫用on error resume next形成的空間被停用

宣布日期 2012-03-17 16:46:27

on error resume next 這條語句是用來屏障犯錯信息,當犯錯時,使得法式持續履行的,不過在利用中,仿佛良多人不斟酌到on error resume next的感化規模.比方

<%

On Error Resume Next

     Set Conn
=Server.CreateObject("ADODB.Connection"
)

    
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db.mdb"
)

     If
Err.Number<>0 Then Response.Write "數據庫毗連產生毛病" : Response.
End

    


Set Rs
=conn.execute("Select * from 表"
)

Do While
Not rs.
eof

     response
.write rs(0
)

rs.
movenext

loop


%>

近似下面的代碼,若是毛病是產生在成立數據毗連的時辰,那末法式會根據咱們假想的那樣遏制履行,給出犯錯信息,但假設是在set rs=conn.execute("select * from 表")這里犯錯呢?這個時辰on error resume next依然在起感化,這時辰,一個占用cpu 100%的死輪回就呈現了,成果呢,若是辦事器設置的好,那頂多你本身的站點沒法拜候了,若是辦事器設置不夠嚴酷,那全部辦事器的站點都要遭殃,成果便是空間商停掉你的空間.

代碼革新一下

<%


Dim conn

Sub connect

On Error Resume Next

     Set Conn
=Server.CreateObject("ADODB.Connection"
)

    
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db.mdb"
)

     If
Err.Number<>0 Then Response.Write "數據庫毗連產生毛病" : Response.
End

End sub    


connect


Set Rs
=conn.execute("Select * from 表"
)

Do While
Not rs.
eof

     response
.write rs(0
)

rs.
movenext

loop


%>

如許on error resume next就只感化于connect這個進程了,前面法式犯錯,不會因為on error resume next而帶來死輪回.

別的,on error resume next會屏障掉犯錯信息,在寫法式的時辰,特別是初學者寫法式的時辰,很有能夠因為這條語句的利用,使你疏忽掉法式里埋沒的一些小毛病.以是必然要慎用.

 
因為死輪回形成辦事器cpu100%,咱們將停息空間web辦事,待修復題目后才可從頭守舊