一個(gè)需要讀寫數據庫的(de)頁面裏包含類似<!-- #include file="conn.asp" -->的(de)代碼時(shí),實際上,當你沒有進行任何讀寫數據庫操作時(shí),這(zhè)個(gè)數據庫連接仍然是打開的(de),仍然在消耗著(zhe)服務器的(de)資源。
數據庫連接代碼封裝在函數裏,在需要讀取時(shí)調用(yòng)這(zhè)個(gè)函數。讓數據庫連接僅在需要讀取數據庫時(shí)才打開,不讀取時(shí)就沒有任何動作.
以下(xià)是ACCESS連接代碼:
Function Openconn()
dim DBFileName,Conn
DBFileName = "#-#-#abcd.mdb"
set Conn=server.createObject("ADODB.connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(DBFileName)
On Error Resume Next
conn.Open connstr
set Openconn=Conn
If Err Then
err.Clear
Conn.close:set Conn=nothing
Response.Write "對(duì)不起,數據庫連接出錯。"
Response.End
End If
End Function
調用(yòng)方法:
将原來(lái)的(de) rs.open sql,conn 改成 rs.open sql,Open_conn()
同服務器跨站共享ACCESS數據庫,使用(yòng)數據庫物(wù)理(lǐ)路徑
Source="數據庫物(wù)理(lǐ)路徑 如E:\目錄\目錄\數據庫名
在某個(gè)頁面上調用(yòng)了(le)兩次CloseConn函數就出現了(le)以下(xià)的(de)問題
Microsoft VBScript 運行時(shí)錯誤 錯誤 '800a01a8'
缺少對(duì)象: 'Conn'
那這(zhè)個(gè)函數的(de)主要功能是判斷conn是否關閉了(le),還(hái)沒關閉就把它關閉,那爲什(shén)麽會出現上面的(de)問題
原因是IsObject判斷conn,無論conn是否關閉都是返回True的(de)。
第一次調用(yòng),conn正常被關閉,而且等于爲nothing,
那第二次調用(yòng)時(shí),conn就是nothing,就被系統認爲沒有了(le)這(zhè)個(gè)對(duì)象,
所以我們要把函數改爲以下(xià)才可(kě)以正常運行。
關閉數據庫連接:CloseConn(conn)
Sub CloseConn(conn)
if IsObject(conn) then
if LCase(TypeName(conn)) <> "nothing" then
conn.close
set conn=nothing
end if
end if
End Sub
注:LCase(TypeName(conn)) ,LCase()一定需要的(de),TypeName(conn)返回的(de)值是Nothing(大(dà)寫N),那加上這(zhè)個(gè)LCase把返回值都轉爲小寫,那就萬無一失了(le)。