這篇文章以VB產生的DLL封裝ASP代碼來串連資料庫(以Access資料庫為例)。
一般情況下我們在用ASP串連Access的資料庫時通常都會進行如下的操作
'//Proconn.asp
<%
dim ProConn
set ProConn=Server.CreateObject("ADODB.CONNECTION")
ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
'一個原本為DB.mdb的Access資料庫更改尾碼為DB.asp的檔案,資料庫密碼123
if err.Number <> 0 then
ResPonse.Write "資料庫沒有連結,請檢查"
ResPonse.End
else
ResPonse.Write "資料庫連結成功"
ResPonse.End
end if
%>
如果配置好伺服器,訪問Proconn.asp,如果串連資料庫成功會輸出“資料庫連結成功”。
但是這樣的asp代碼的安全層級非常低,如果此asp原代被人看到,那麼再有此資料庫檔案的話,其他人就能輕而易舉
隨便開啟你的資料庫進行操作。
所以我們的任務來了,如何將這些關鍵的內容封裝起來呢?
首先需要確定方式方法和對象。
查看了網上的一些資料,主要都是用VB產生DLL的辦法來封裝的,那麼我們也採取這樣的方法好了,(雖然我還沒用真正用過VB這東東)
方式方法確定,那麼什麼是我們需要封裝的對象呢?
大家來看
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
是最關鍵的代碼,這段代碼封裝在一個用VB產生的DLL中,應該比較好。
之所以不將整個
dim ProConn
set ProConn=Server.CreateObject("ADODB.CONNECTION")
ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
都封裝,(因為網上有講將整個串連代碼都封裝)是因為,在其他asp檔案引用Proconn.asp時,
我還需要裡面的ProConn進行其他動作,如果封裝,不便進行引用和操作。
(以上封裝對象的解釋原因是我個人的見解,有朋友說整體封裝對ProConn的使用沒有影響,這個我不理解,請知道的給我講講)
所在只想封裝最關鍵的部分“"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")”
分析一下這段要封裝的內容,
它的前半部分就是一個字串:
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="
用&串連上後半部分的另一個字串。
後半部分的另一個字串是Server.MapPath對象函數的傳回值。
下面開始這個封裝的操作過程。
首先
建立一個VB下的ActiveX DLL工程,工程的名稱Project1更改成ConDBDLL?? 方法class1的名稱更改成cs
工程名和方法名會在調用這個DLL的時候使用到,大家可以按照自己命名規則定義,但請注意好好使用。
這個DLL的代碼部分書寫如下:
Dim rp As Response
Dim rq As Request
Dim ap As Application
Dim sr As Server
Dim sn As Session
Public Sub OnStartPage(MyScriptingContext As ScriptingContext)
Set rp = MyScriptingContext.Response
Set rq = MyScriptingContext.Request
Set sr = MyScriptingContext.Server
Set ap = MyScriptingContext.Application
Set sn = MyScriptingContext.Session
End Sub
Public Sub OnEndPage()
Set rp = Nothing
Set rq = Nothing
Set sr = Nothing
Set ap = Nothing
Set sn = Nothing
End Sub
'以上語句是必須的,將原本的對象作了簡化處理,並在兩個基本函數中作了處理
Public Function ConnectDB() As Variant
ConnectDB = "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="
End Function
'上面這個函數是處理前半部分字串的,直接返回這個字串的內容
'另外定義下面這個函數來處理後半部分內容
Public Function DBPath() As Variant
DBPath = sr.MapPath("DB.asp")
End Function
'注意上面使用的是sr,不要使用成Server了
到了關鍵的一步,給這個工程添加"Microsoft Active Server Pages ObjectContext Object Library" 的 Reference
添加方法,選擇菜單中的"Project"->"Reference",在開啟的對話方塊裡選擇。
對了,還要選擇上"microsoft activeX data objects 2.6 library"
進行完以上操作,我們就可以編譯產生DLL了,(別忘了前面的改工程名和方法名)
準備好資料庫檔案DB.asp (由DB.mdb更改尾碼而成,密碼123)
下面就是調用封裝的串連資料庫的asp檔案代碼:
'//ProConn.asp
<%
dim ProConn
set ProConn=Server.CreateObject("ADODB.CONNECTION")
Dim ConDB
set ConDB=Server.CreateObject("ConDBDLL.Conn")
'ConDB就是建立的DLL對象
Dim StrConn
'定義一個字串
StrConn = ConDB.ConnectDB() & ConDB.DBPath()
'串連兩部分內容組成字串
ProConn.Open StrConn
'執行資料庫物件操作
%>
由於是自己建立的DLL,把它拷貝到相應的目錄後,必須註冊才能使用。
註冊的方法,在“運行”中執行:
Regsvr32.exe LuanLuanDBCONN.dll
取消這個DLL的註冊的方法是:Regsvr32.exe /u LuanLuanDBCONN.dll
註冊完畢,我們的工作基本上就做完了,現在我們可以使用這樣的封裝方法串連具有針對性的資料庫了。
不過有一點需要特別注意的是:
由於
Dim ConDB
set ConDB=Server.CreateObject("ConDBDLL.Conn")
'ConDB就是建立的DLL對象
這是在ASP中建立的對象,包括ProConn,那麼我們在任何使用到(引用)ProConn.asp的其他ASP檔案中記得釋放這兩個對象!
ProConn.close
set ProConn=nothing
set ConDB=Nothing
否則系統會由於對象沒有釋放,而變得越來越不堪重負。
關於這個封裝ASP代碼串連Access資料庫的方法,我想完全適用其他資料庫的串連方法。
封裝其它資料庫連接一樣。