将ASP代码用VB封装DLL后,用ASP调用出错!

zhdleo 2004-08-30 09:42:47
问题原因:
一般情况下我们在用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
%>

我不明白为什么会出错,难道我的调用有什么不对吗?

请大家帮帮忙。谢谢。
...全文
299 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbx972 2005-03-15
  • 打赏
  • 举报
回复
组件!`
zhdleo 2004-08-31
  • 打赏
  • 举报
回复
结帖,谢谢大家。
wzgme 2004-08-30
  • 打赏
  • 举报
回复
楼主不用这样做啊。,???
---------------------------
按你的说法是ProConn要其他地方调用,所以不将连接数据库整个封装。
-----------其实封装后,调用一样没什么问题。。还比你的想法简单,直接用vb的ado连接。

-------------
楼主引用了asp.dll。定义了asp的对象在vb中的名称,dll中就要如 ICka(IC卡)说的做。
----------------
一切原因还是楼主的vb代码上,怀疑楼主是不是真的明白了dll的写法??
zhdleo 2004-08-30
  • 打赏
  • 举报
回复
恩,我也发现了,现在字符串正常了。

应该连接正常了。

我去用个实际数据库测测,测好了,告诉大家。

高兴ing
华之瓯越 2004-08-30
  • 打赏
  • 举报
回复
错误应该在这里了
DBname = Server.MapPath ("DB.asp")

正确的应该是 DBname = sr.MapPath ("DB.asp")

因为你在这个DLL里是这样定义的
Dim sr As Server
zhdleo 2004-08-30
  • 打赏
  • 举报
回复
先谢谢zltostem(尘寞)
但是我的问题没有解决,

我现在已经定位ConDB.DBname()返回的内容是否 正确,

如果正确了,我才能 确定怎么 连接StrConn StrDBname再执行,

现在的问题出在StrConn返回正确了

但是ConDB.DBname()返回的不正确,无法赋给StrDBname

Public Function DBname()

Server.MapPath ("DB.asp")

End Function
这样写应该不对,
但是

Public Function DBname() As Variant

DBname = Server.MapPath ("DB.asp")

End Function
这样写为什么也不对呢???

zltostem 2004-08-30
  • 打赏
  • 举报
回复
sory~~~

<%
dim ProConn
ProConn=Server.CreateObject("ADODB.CONNECTION")
Dim ConDB
set ConDB=Server.CreateObject("ConDBDLL.cs")

Dim StrConn
StrConn = ConDB.ConnectDB()

Dim StrDBname
StrDBname = ConDB.DBname()

ProConn.Open StrConn & StrDBname
%>
zltostem 2004-08-30
  • 打赏
  • 举报
回复
<%
dim ProConn
ProConn=Server.CreateObject("ADODB.CONNECTION")
Dim ConDB
set ConDB=Server.CreateObject("ConDBDLL.cs")
Dim StrConn
StrConn = ConDB.ConnectDB()

ProConn.Open ConDB & StrConn
%>

try~~~
poolnet 2004-08-30
  • 打赏
  • 举报
回复
呵呵...
response.write ProConn.connectstring

mdb加密 我给你10内获取密码
华之瓯越 2004-08-30
  • 打赏
  • 举报
回复
Dim StrConn
set StrConn = ConDB.ConnectDB()

ProConn.Open StrConn & ConDB.DBname()

你改写成这样的看看
Dim StrConn
StrConn = ConDB.ConnectDB() & ConDB.DBname()

ProConn.Open StrConn
zhdleo 2004-08-30
  • 打赏
  • 举报
回复
明白了一点,不要set.

但是最后的调用,到底应该怎么使?

ProConn.Open StrConn & ConDB.DBname()似乎不对。

大家再帮帮我。谢谢
zhdleo 2004-08-30
  • 打赏
  • 举报
回复
重大发现!!!

我原来的错,我将原来的
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath ("DB.asp")
误认为一串了,

应该是前面是一串,后面是一个server的调用。
所以我进行以下修改。


修改后的封装代码如下:
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 DBname()

Server.MapPath ("DB.asp")

End Function

修改后的连接代码如下:
<%
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 & ConDB.DBname()
%>

但是问题是ConnectDB()函数返回的只是最前面的20个字符!!!!!
报错说:
错误类型:
Microsoft VBScript 运行时错误 (0x800A01A8)
缺少对象: '[string: "driver={Microsoft Ac"]'
/pro/ProDB.asp, 第 7 行

这里面就20个字符被返回,我需要的是
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="
这么一串,哪里去了,怎么解决呀!
ryuginka 2004-08-30
  • 打赏
  • 举报
回复
up
OnlyVB 2004-08-30
  • 打赏
  • 举报
回复
set ProConn=Server.CreateObject("ADODB.CONNECTION")
在vb中好像不能用Server
zltostem 2004-08-30
  • 打赏
  • 举报
回复
set strconn = ConDB.ConnectDB()

呵呵,这样呢?

strconn = ConDB.ConnectDB()
zhdleo 2004-08-30
  • 打赏
  • 举报
回复
什么?应该不是那原因吧?

看看我出错的地方:
错误类型:
ConDBDLL (0x800A01A8)
需要对象
/CDB/ConDB.asp, 第 7 行
<%
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
.......................

zltostem 2004-08-30
  • 打赏
  • 举报
回复
放到组件服务器
zhdleo 2004-08-30
  • 打赏
  • 举报
回复
注册了也不行。还是帮我看看代码吧,我怎么觉得还是自己代码写的不对。

不是引用的地方,就是那个函数的返回。
mind_1220 2004-08-30
  • 打赏
  • 举报
回复
你的dll 文件注册了吗?
kersic 2004-08-30
  • 打赏
  • 举报
回复
要引入一个ASP的组件。
好象是。
加载更多回复(2)

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧