国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > ASP > 正文

用VB生成DLL封裝ASP代碼,連接數(shù)據(jù)庫

2024-05-04 11:06:18
字體:
供稿:網(wǎng)友
這篇文章以vb生成的dll封裝asp代碼來連接數(shù)據(jù)庫(以access數(shù)據(jù)庫為例)。

一般情況下我們在用asp連接access的數(shù)據(jù)庫時(shí)通常都會進(jìn)行如下的操作

'//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")
'一個(gè)原本為db.mdb的access數(shù)據(jù)庫更改后綴為db.asp的文件,數(shù)據(jù)庫密碼123

if err.number <> 0 then
response.write "數(shù)據(jù)庫沒有連結(jié),請檢查"
response.end
else
response.write "數(shù)據(jù)庫連結(jié)成功"
response.end
end if
%>

如果配置好服務(wù)器,訪問proconn.asp,如果連接數(shù)據(jù)庫成功會輸出“數(shù)據(jù)庫連結(jié)成功”。

但是這樣的asp代碼的安全級別非常低,如果此asp原代被人看到,那么再有此數(shù)據(jù)庫文件的話,其他人就能輕而易舉的
隨便打開你的數(shù)據(jù)庫進(jìn)行操作。

所以我們的任務(wù)來了,如何將這些關(guān)鍵的內(nèi)容封裝起來呢?

首先需要確定方式方法和對象。

查看了網(wǎng)上的一些資料,主要都是用vb生成dll的辦法來封裝的,那么我們也采取這樣的方法好了,(雖然我還沒用真正用過vb這東東)

方式方法確定,那么什么是我們需要封裝的對象呢?

大家來看
"driver={microsoft access driver (*.mdb)};uid=;pwd=123;dbq=" & server.mappath("db.asp")
是最關(guān)鍵的代碼,這段代碼封裝在一個(gè)用vb生成的dll中,應(yīng)該比較好。
之所以不將整個(gè)
dim proconn
set proconn=server.createobject("adodb.connection")
proconn.open "driver={microsoft access driver (*.mdb)};uid=;pwd=123;dbq=" & server.mappath("db.asp")
都封裝,(因?yàn)榫W(wǎng)上有講將整個(gè)連接代碼都封裝)是因?yàn)椋谄渌鸻sp文件引用proconn.asp時(shí),
我還需要里面的proconn進(jìn)行其他操作,如果封裝,不便進(jìn)行引用和操作。
(以上封裝對象的解釋原因是我個(gè)人的見解,有朋友說整體封裝對proconn的使用沒有影響,這個(gè)我不理解,請知道的給我講講)


所在只想封裝最關(guān)鍵的部分“"driver={microsoft access driver (*.mdb)};uid=;pwd=123;dbq=" & server.mappath("db.asp")”

分析一下這段要封裝的內(nèi)容,
它的前半部分就是一個(gè)字符串:
"driver={microsoft access driver (*.mdb)};uid=;pwd=123;dbq="
用&連接上后半部分的另一個(gè)字符串。
后半部分的另一個(gè)字符串是server.mappath對象函數(shù)的返回值。



下面開始這個(gè)封裝的操作過程。
首先
新建一個(gè)vb下的activex dll工程,工程的名稱project1更改成condbdll?? 方法class1的名稱更改成cs
工程名和方法名會在調(diào)用這個(gè)dll的時(shí)候使用到,大家可以按照自己命名規(guī)則定義,但請注意好好使用。
這個(gè)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
'以上語句是必須的,將原本的對象作了簡化處理,并在兩個(gè)基本函數(shù)中作了處理

public function connectdb() as variant

connectdb = "driver={microsoft access driver (*.mdb)};uid=;pwd=123;dbq="

end function
'上面這個(gè)函數(shù)是處理前半部分字符串的,直接返回這個(gè)字符串的內(nèi)容

'另外定義下面這個(gè)函數(shù)來處理后半部分內(nèi)容
public function dbpath() as variant
dbpath = sr.mappath("db.asp")
end function
'注意上面使用的是sr,不要使用成server了

到了關(guān)鍵的一步,給這個(gè)工程添加"microsoft active server pages objectcontext object library" 的 reference
添加方法,選擇菜單中的"project"->"reference",在打開的對話框里選擇。
對了,還要選擇上"microsoft activex data objects 2.6 library"

進(jìn)行完以上操作,我們就可以編譯生成dll了,(別忘了前面的改工程名和方法名)

準(zhǔn)備好數(shù)據(jù)庫文件db.asp (由db.mdb更改后綴而成,密碼123)

下面就是調(diào)用封裝的連接數(shù)據(jù)庫的asp文件代碼:
'//proconn.asp
<%
dim proconn
set proconn=server.createobject("adodb.connection")
dim condb
set condb=server.createobject("condbdll.conn")
'condb就是創(chuàng)建的dll對象

dim strconn
'定義一個(gè)字符串
strconn = condb.connectdb() & condb.dbpath()
'連接兩部分內(nèi)容組成字符串
proconn.open strconn
'執(zhí)行數(shù)據(jù)庫對象操作
%>


由于是自己創(chuàng)建的dll,把它拷貝到相應(yīng)的目錄后,必須注冊才能使用。
注冊的方法,在“運(yùn)行”中執(zhí)行:
regsvr32.exe lyfupload.dll

取消這個(gè)dll的注冊的方法是:regsvr32.exe /u lyfupload.dll

注冊完畢,我們的工作基本上就做完了,現(xiàn)在我們可以使用這樣的封裝方法連接具有針對性的數(shù)據(jù)庫了。

不過有一點(diǎn)需要特別注意的是:
由于
dim condb
set condb=server.createobject("condbdll.conn")
'condb就是創(chuàng)建的dll對象
這是在asp中創(chuàng)建的對象,包括proconn,那么我們在任何使用到(引用)proconn.asp的其他asp文件中記得釋放這兩個(gè)對象!
proconn.close
set proconn=nothing
set condb=nothing
否則系統(tǒng)會由于對象沒有釋放,而變得越來越不堪重負(fù)。

關(guān)于這個(gè)封裝asp代碼連接access數(shù)據(jù)庫的方法,我想完全適用其他數(shù)據(jù)庫的連接方法。

我想我的這個(gè)方法并不是最好的,有任何不足之處,請看過的人給我指正,在此先行謝過。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 正蓝旗| 康乐县| 遂平县| 北宁市| 贵溪市| 海口市| 班戈县| 门头沟区| 綦江县| 江孜县| 阜城县| 安龙县| 清镇市| 普洱| 图木舒克市| 萍乡市| 五台县| 永康市| 东海县| 泉州市| 保山市| 新晃| 禄劝| 安阳县| 三明市| 宁阳县| 湖州市| 江山市| 西丰县| 双峰县| 芦山县| 香格里拉县| 郯城县| 安乡县| 江华| 瑞金市| 巴中市| 郧西县| 宿迁市| 定边县| 泸西县|