用VB生成DLL封裝ASP代碼,連接數據庫
2024-05-04 11:06:18
供稿:網友
這篇文章以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數據庫的方法,我想完全適用其他數據庫的連接方法。
我想我的這個方法并不是最好的,有任何不足之處,請看過的人給我指正,在此先行謝過。