在dll组件中连接SQL数据库时出现的问题

KennyLong 2005-10-07 08:42:02
dll文件的vb代码如下:
Option Explicit
Private MyScriptingContext As ScriptingContext
Private MyRequest As Request
Private MyResponse As Response
Private MyServer As Server
Private MySession As Session
Private conn As ADODB.Connection
Private connstr As String

Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
Set MyScriptingContext = PassedScriptingContext
Set MyRequest = MyScriptingContext.Request
Set MyResponse = MyScriptingContext.Response
Set MyServer = MyScriptingContext.Server
Set MySession = MyScriptingContext.Session
End Sub

Public Function OpenDB(ByVal dbip, dbuser, dbpwd, dbname)
Set conn = MyServer.CreateObject("ADODB.Connection")
connstr = "provider=sqloledb;data source=" & dbip & ";uid=" & dbuser & ";pwd=" & dbpwd & ";database=" & dbname
conn.Open connstr
End Function

ASP调用dll部份的代码如下:
call class1.opendb(dbip,dbuser,dbpwd,dbname)
set rs=server.createobject("adodb.recordset")
rs.open "select username from users where id=1",conn,1,1

为什么用上面这段ASP代码调用组件时出现这样的错误?
ADODB.Recordset 错误 '800a0bb9'
参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。

已确定没有写错变量值。好像是dll中的OpenDB函数有问题,但又具体找不出是什么原因。请大家帮我看看。
...全文
130 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
KennyLong 2005-10-08
  • 打赏
  • 举报
回复
感谢大家的回复,我把conn声明为全局变量,然后把conn,1,1改成class1.conn,1,1就好了。
结贴~~~~~
dh20156 2005-10-07
  • 打赏
  • 举报
回复
1、把所有私有对象改为公共对象
2、把select username from users where id=1改为select [username] from [users] where [id]=1
TRY.
hzbigdog 2005-10-07
  • 打赏
  • 举报
回复
你把Conn声明为公共变量
这样在外部才能够去访问
Public Conn As ADODB.Connection
hzbigdog 2005-10-07
  • 打赏
  • 举报
回复
rs.open "select username from users where id=1",conn,1,1
你这句话的conn是什么意思?
明明是类内部的对象,你怎么可以在外部使用?你的思路不对!

这个是我在程序中使用的方式
Option Explicit

Public Conn As ADODB.Connection
Private dbType As String '数据库连接类型



'==============================组件构造=============================
Private Sub Class_Initialize()
dbType = ""
str_SN = GetSerialNumber()
End Sub

'==============================组件析构=============================
Private Sub Class_Terminate()
Conn.Close
Set Conn = Nothing
End Sub

'========================建立数据库连接=======================
Public Function CreatAccessConn(dbPath As Variant, dbPWD As Variant)
Dim ConnStr As String
Dim ErrNum As Error

' If UnPiracy() = -1 Then
' CreatAccessConn = False
' Exit Function '防copy核心,非法copy将无法建立数据库连接
' End If

CreatAccessConn = True
ConnStr = "Driver={Microsoft Access Driver (*.mdb)};dbq=" & dbPath & ";UID=;PWD=" & Encode(dbPWD)

On Error Resume Next
Set Conn = New ADODB.Connection
Conn.ConnectionTimeout = 5 '超时时间
Conn.Open ConnStr
If Conn.Errors.Count > 0 Then '测试数据库连接是否成功建立
For Each ErrNum In Conn.Errors
If ErrNum.Number <> 0 Then '连接建立失败
Conn.Errors.Clear
Set Conn = Nothing
Conn = Empty
CreatAccessConn = False
dbType = ""
Exit Function
End If
Next
dbType = "MS Access"
Else
dbType = "MS Access"
End If
End Function

外部访问的时候用
对象名.Conn,这个方式来引用
ShiningstarHu 2005-10-07
  • 打赏
  • 举报
回复
rs.open "select username from users where id=1",conn,1,1
中的conn请问你在哪里定一的?

KennyLong 2005-10-07
  • 打赏
  • 举报
回复
up~~~~~~~~~~~~~~
KennyLong 2005-10-07
  • 打赏
  • 举报
回复
顶,弄了一晚上都没解决~~~~~~~~
KennyLong 2005-10-07
  • 打赏
  • 举报
回复
class class1.opendb之前,我用以下代码创建了对象,刚才忘了写出来了。
dim class1
set class1=server.createobject("mycls.class1")

28,406

社区成员

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

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