這篇文章以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 lyfUpload.dll
取消這個DLL的註冊的方法是:Regsvr32.exe /u lyfUpload.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資料庫的方法,我想完全適用其他資料庫的連接方法。
我想我的這個方法並不是最好的,有任何不足之處,請看過的人給我指正,在此先行謝過。