用VB生成DLL封装ASP代码,连接数据库

上一篇 / 下一篇  2008-03-20 17:59:18 / 个人分类:智力


VB生成DLL封装ASP代码,连接数据库

MSCBSC | 移动通信网N{D#t%l uh

W+qCo6dJg7|0这篇文章以VB生成的DLL封装ASP代码来连接数据库(以Access数据库为例)。MSCBSC | 移动通信网Wp-K#A-_J

C N*eqX@ jG0 一般情况下我们在用ASP连接Access的数据库时通常都会进行如下的操作

5z*Mh"B'f/?sh,c0 MSCBSC | 移动通信网k&t sS8Z,kM

'//Proconn.aspMSCBSC | 移动通信网$h WjbN-Q@
<%
~+}OuC3TX0dim ProConnMSCBSC | 移动通信网enXF8I-uR5[v,X
set ProConn=Server.CreateObject("ADODB.CONNECTION")
l8xVpS[9Z/m0ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")MSCBSC | 移动通信网 E5N_cn0y&h }
'一个原本为DB.mdb的Access数据库更改后缀为DB.asp的文件,数据库密码123MSCBSC | 移动通信网+?M.o,nR/e#k s%H`6\/N

MSCBSC | 移动通信网q3i;jh$[pQj,P7]\

if err.Number <> 0 thenMSCBSC | 移动通信网5xR F9O-p'Q+nP
    ResPonse.Write "数据库没有连结,请检查"MSCBSC | 移动通信网6j+U9c^E Ib `
    ResPonse.End
,y9?H$@1am4blX \0elseMSCBSC | 移动通信网 \5o&KMIX]
    ResPonse.Write "数据库连结成功"MSCBSC | 移动通信网&z7T&sz/?+j,w4\:y
    ResPonse.End
z:~Y!e G9N0end if  MSCBSC | 移动通信网 y}:d ]C4Mk
%>

5_;V"E,F6T0 MSCBSC | 移动通信网AnON%wbTDS3]

如果配置好服务器,访问Proconn.asp,如果连接数据库成功会输出“数据库连结成功”。

!\9|X&{$S3s'F0

e)J~x$M#Zm0但是这样的asp代码的安全级别非常低,如果此asp原代被人看到,那么再有此数据库文件的话,其他人就能轻而易举的MSCBSC | 移动通信网4K?VDQ B"w
随便打开你的数据库进行操作。

A6P ?f5f2Q:t+b0 MSCBSC | 移动通信网2}n:jnL {A%W'?b

所以我们的任务来了,如何将这些关键的内容封装起来呢?MSCBSC | 移动通信网R3_5{*I X.S{

,JLS3~.f3rPF0首先需要确定方式方法和对象。MSCBSC | 移动通信网p o+m#lLH'`t

-Gf+Q+AeU&h Zz%V0查看了网上的一些资料,主要都是用VB生成DLL的办法来封装的,那么我们也采取这样的方法好了,(虽然我还没用真正用过VB这东东)

4eS.Yf \ b0 MSCBSC | 移动通信网*O~"c)Tb,Z

方式方法确定,那么什么是我们需要封装的对象呢?

5S o-`{S0 MSCBSC | 移动通信网8f1I6x[~

大家来看
2o Jo-g6ao0"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
,[-Ir rg&}0是最关键的代码,这段代码封装在一个用VB生成的DLL中,应该比较好。MSCBSC | 移动通信网s9IN+w/M}yZj[
之所以不将整个
+_@ \%el bB N0dim ProConnMSCBSC | 移动通信网:E&aU7A6i9lV
set ProConn=Server.CreateObject("ADODB.CONNECTION")MSCBSC | 移动通信网g2?M(D.\$aDiti
ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
-`!a!l#i5NE0都封装,(因为网上有讲将整个连接代码都封装)是因为,在其他asp文件引用Proconn.asp时,MSCBSC | 移动通信网Q Y&q\:t f~
我还需要里面的ProConn进行其他操作,如果封装,不便进行引用和操作。
bY3u,GPu6c0(以上封装对象的解释原因是我个人的见解,有朋友说整体封装对ProConn的使用没有影响,这个我不理解,请知道的给我讲讲)MSCBSC | 移动通信网-u;s3@MR/_T I t

Z QmP)UqO"G G0
%T _:VbQ ^0所在只想封装最关键的部分“"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")”MSCBSC | 移动通信网 {~*|OvI

` mq#V"?V$Dg@0分析一下这段要封装的内容,MSCBSC | 移动通信网'o{m(v x3em9rU
它的前半部分就是一个字符串:MSCBSC | 移动通信网@/y)M ]N&Y
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="MSCBSC | 移动通信网.u_|@4qRu
用&连接上后半部分的另一个字符串。MSCBSC | 移动通信网,Fqn{ ZM%I7C.E T*G
后半部分的另一个字符串是Server.MapPath对象函数的返回值。MSCBSC | 移动通信网wGP6{8\y"](Y

MSCBSC | 移动通信网5uS*M-Zq P.f8I |(~

 MSCBSC | 移动通信网 Dy+s Q#[C k

xmb0g(J5p[_$}0下面开始这个封装的操作过程。
i0sUY9L&|LV0首先MSCBSC | 移动通信网t4o+W bW a)qA
新建一个VB下的ActiveX DLL工程,工程的名称Project1更改成ConDBDLL?? 方法class1的名称更改成cs
4n$u Yk&d0工程名和方法名会在调用这个DLL的时候使用到,大家可以按照自己命名规则定义,但请注意好好使用。
Y]z~(N J.e0这个DLL代码部分书写如下:

6C,v3T?~ o0 MSCBSC | 移动通信网aA3n+Mszy W9G|.o,y

Dim rp As ResponseMSCBSC | 移动通信网)_Y]B K4O Izj2l
Dim rq As Request
m'Wb2e*haF:n0Dim ap As ApplicationMSCBSC | 移动通信网 q.MeSUnj~%i
Dim sr As ServerMSCBSC | 移动通信网$z2p[]:M*x A|K.r
Dim sn As SessionMSCBSC | 移动通信网`QC5nX(A-|

Np%[uQ+F0Public Sub OnStartPage(MyScriptingContext As ScriptingContext)
5UyS*`:J6w%`}b2O0Set rp = MyScriptingContext.ResponseMSCBSC | 移动通信网g8L4w ub
Set rq = MyScriptingContext.Request
0L*p`j#ns8Y%@ ?:V/[0Set sr = MyScriptingContext.Server
^3X[g*G5qX*kN0Set ap = MyScriptingContext.Application
F(u2dS M|Um!_ Nm0Set sn = MyScriptingContext.Session
,f$bZp1N3X0End Sub

1K1v}V%r%ww0 MSCBSC | 移动通信网8Z@ N8lcW

Public Sub OnEndPage()
CEp^kv0V0Set rp = Nothing
K"~K3W(O @0Set rq = Nothing
#MrK,g~?-V H#U/z#N0Set sr = Nothing
9O j_)s @ Y0U/E0Set ap = Nothing
.vkeaT%@0Set sn = NothingMSCBSC | 移动通信网"r/AD\(_R8t1ac3VX
End SubMSCBSC | 移动通信网9Q%w%YMy\;c
'以上语句是必须的,将原本的对象作了简化处理,并在两个基本函数中作了处理MSCBSC | 移动通信网'd[!e)s+P%i[r

MSCBSC | 移动通信网q4o.u*Y&y/I

Public Function ConnectDB() As Variant

T WQ qSD ZK8K0

nm1_%e$`\6o qo0ConnectDB = "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="MSCBSC | 移动通信网t I4hOd

MSCBSC | 移动通信网k|*F^fCD8` k

End Function
;{ W4M;}@0D+ZB \} Du0'上面这个函数是处理前半部分字符串的,直接返回这个字符串的内容MSCBSC | 移动通信网Sv J y0Wx)eTE D$_+T

MSCBSC | 移动通信网^x;F@] P |

'另外定义下面这个函数来处理后半部分内容
znGb#n(U[3Aex0Public Function DBPath() As Variant
0E:xV/E5Z0           DBPath = sr.MapPath("DB.asp")
8C'Bj vm*K0End Function
c4Q+J;RU0'注意上面使用的是sr,不要使用成Server了MSCBSC | 移动通信网L1tW9I5S\-E

2Q2~c { U dT0到了关键的一步,给这个工程添加"Microsoft Active Server Pages ObjectContext Object Library" 的 Reference
2FGNKm0添加方法,选择菜单中的"Project"->"Reference",在打开的对话框里选择。
:Z$v4\U8My`.qP0对了,还要选择上"microsoft  activeX  data  objects  2.6  library"MSCBSC | 移动通信网B6GNe9R2u{'s;G|"?L`

N hF,RZ&o0进行完以上操作,我们就可以编译生成DLL了,(别忘了前面的改工程名和方法名)MSCBSC | 移动通信网9D8EA&r"](Qt

MSCBSC | 移动通信网Wj` Ro0`

准备好数据库文件DB.asp (由DB.mdb更改后缀而成,密码123)MSCBSC | 移动通信网j*m!Ti&HS4xYg-E

MSCBSC | 移动通信网c@ ^"r Em)a&~9]n

下面就是调用封装的连接数据库的asp文件代码
FC1n8u[9B nF0'//ProConn.asp
/JLK"i.k'sA@0<%MSCBSC | 移动通信网"F7F.bM.q,oS
dim ProConn
x0|"M7n _0~#| gV1G^0set ProConn=Server.CreateObject("ADODB.CONNECTION")MSCBSC | 移动通信网YFW.Zg I!l
Dim ConDB
0s9Y.C'q(b5g7Z:P2u*c0set ConDB=Server.CreateObject("ConDBDLL.Conn")MSCBSC | 移动通信网n(qw([#l|9{K
'ConDB就是创建的DLL对象MSCBSC | 移动通信网h&M|0N w)^

Yz iwnDT-?0Dim StrConnMSCBSC | 移动通信网'nTx4f&o.uvK"|!C-b
'定义一个字符串
Dd-E Q HF LdWR0StrConn = ConDB.ConnectDB() & ConDB.DBPath()MSCBSC | 移动通信网 BX;{$v9z#p+h6f
'连接两部分内容组成字符串MSCBSC | 移动通信网 vT$v0j7~)[Q
ProConn.Open StrConn MSCBSC | 移动通信网d"CbF \!_*~
'执行数据库对象操作
o i;QT+n3]B0%>MSCBSC | 移动通信网$K%~,kk.[

MSCBSC | 移动通信网)zbqyj#{

MSCBSC | 移动通信网"xf#SvBh%m+C{
由于是自己创建的DLL,把它拷贝到相应的目录后,必须注册才能使用。MSCBSC | 移动通信网vR"_0m+c%^+I y
注册的方法,在“运行”中执行:
fgOJ;k w0Regsvr32.exe lyfUpload.dllMSCBSC | 移动通信网T&|G${@(kg A(G9]3C

MSCBSC | 移动通信网9K B#R"i2TGYy'Q

取消这个DLL的注册的方法是:Regsvr32.exe /u lyfUpload.dllMSCBSC | 移动通信网V E/[ h \[

?6Jr[(JM0注册完毕,我们的工作基本上就做完了,现在我们可以使用这样的封装方法连接具有针对性的数据库了。MSCBSC | 移动通信网*E ?EPt,y

MSCBSC | 移动通信网 qhY fX1?6j*LyI

不过有一点需要特别注意的是:
1|)WXx`0~0由于MSCBSC | 移动通信网WM-J5P*y
Dim ConDBMSCBSC | 移动通信网(qn7b2{:I3N9GF
set ConDB=Server.CreateObject("ConDBDLL.Conn")
b4U;b(dQ-e$M0'ConDB就是创建的DLL对象MSCBSC | 移动通信网c)o6?(s;K
这是在ASP中创建的对象,包括ProConn,那么我们在任何使用到(引用)ProConn.asp的其他ASP文件中记得释放这两个对象!MSCBSC | 移动通信网 h'C Aa:Ol U0{
ProConn.close
T H v0[ h,kY0set ProConn=nothingMSCBSC | 移动通信网|9c9U4J&R/X
set ConDB=NothingMSCBSC | 移动通信网Zxa2B4{W#Q'o}4z
否则系统会由于对象没有释放,而变得越来越不堪重负。

r%L2R1E's0

1zl [ WyMLf,NS3\,i0关于这个封装ASP代码连接Access数据库的方法,我想完全适用其他数据库的连接方法。

"a0J$t0`|(kX(Y{0 MSCBSC | 移动通信网 t@@Z,Z

我想我的这个方法并不是最好的,有任何不足之处,请看过的人给我指正,在此先行谢过。

8s \M/cik;v }R:V;v0  

TAG: ASP代码 数据库 DLL 封装

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar