這篇文章以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數據庫的方法,我想完全適用其他數據庫的連接方法。
我想我的這個方法並不是最好的,有任何不足之處,請看過的人給我指正,在此先行謝過。