将ASP代码用VB封装DLL后,用ASP调用出错!
问题原因:
一般情况下我们在用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原代被人看到,那么再有此数据库文件的话,其他人就能轻而易举的
随便打开你的数据库进行操作。
所以我想将
"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进行其他操作,如果封装,不便进行引用和操作。
所在只想封装最关键的部分“"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")”
封装过程如下:
新建一个VB下的ActiveX DLL工程,工程的名称Project1更改成ConDBDLL 方法class1的名称更改成cs
这个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()
ConnectDB = "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
End Function
给这个工程添加"Microsoft Active Server Pages ObjectContext Object Library" 的 Reference
然后编译生成ConDBDLL.dll
准备好数据库文件DB.asp (由DB.mdb更改后缀而成,密码123)
下面就是调用封装的连接数据库的asp文件代码:
<%
dim ProConn
set ProConn=Server.CreateObject("ADODB.CONNECTION")
Dim ConDB
set ConDB=server.CreateObject("ConDBDLL.cs")
Dim strconn
set strconn = ConDB.ConnectDB() '<-----报这里出错
ProConn.Open strconn
if err.Number <> 0 then
ResPonse.Write "数据库没有连结,请检查"
ResPonse.End
else
ResPonse.Write "数据库连结成功"
ResPonse.End
end if
%>
我不明白为什么会出错,难道我的调用有什么不对吗?
请大家帮帮忙。谢谢。