com调用出错!

我在com中写了如下代码

'检验用户合法性
Public Function CheckUser(strId As String, strPws As String) As String
Dim strSql As String

Set Rs = New ADODB.Recordset

strSql = "select * from user_manage where user_id = '" & strId & "' and user_pw = '" & strPws & "'"

CheckUser = strSql
Exit Function

Rs.Open strSql, Conn, adOpenStatic, adLockOptimistic

If Rs.RecordCount <= 0 Then

CheckUser = False

Else
If Rs("user_id") <> strId Or Rs("user_pw") <> strPws Then
CheckUser = False
Else
CheckUser = True
End If
End If

End Function

在asp脚本中则写了如下代码
<%
dim strUId, strUpss
dim myObj
dim flag

strUId = request("txtUId")
strUpss = request("txtPss")

if strUid <> "" and strUpss <> "" then
set myObj = server.CreateObject("czcxObj.clsCzcx")
flag = myObj.CheckUser(strUid,strUpss)
response.write flag
if flag = false then
response.Write("登录失败!")
else
response.Write("登录成功!")
end if
end if

%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<form name="F1" method="post">
<body>
<p>用户代码:
<input type="text" name="txtUId">
</p>
<p>密 码:
<input type="text" name="txtPss">
</p>
<p>
<input type="submit" name="Submit" value="提交">
</p>
<p> </p>
</body>
</form>
</html>

运行出错啊

错误发生在
flag = myObj.CheckUser(strUid,strUpss)
这里,百思不得其解。
各位大哥帮忙看看啊,小弟不胜感激!!
[1907 byte] By [Sunnyyuan-Sunny] at [2008-5-22]
# 1
调试说类型不匹配,checkuser 不能处理

'检验用户合法性
Public Function CheckUser(strId As String, strPws As String) As Boolean
Dim strSql As String

Set Rs = New ADODB.Recordset

strSql = "select * from user_manage where user_id = '" & strId & "' and user_pw = '" & strPws & "'"

Rs.Open strSql, Conn, adOpenStatic, adLockOptimistic

If Rs.RecordCount <= 0 Then

CheckUser = False

Else
If Rs("user_id") <> strId Or Rs("user_pw") <> strPws Then
CheckUser = False
Else
CheckUser = True
End If
End If

End Function

修改如下,错误依旧
另外,conn是连接正确的
Sunnyyuan-Sunny at 2007-10-22 > top of Msdn China Tech,visual basic,COM/DCOM/COM+...
# 2
没有人关注么??
Sunnyyuan-Sunny at 2007-10-22 > top of Msdn China Tech,visual basic,COM/DCOM/COM+...
# 3
你把 As String 啊什么的去掉如何?另外,你在Windows环境下测试过你的组件么?
# 4
使用组件封装数据库操作(二)
http://www.Codefund.cn/develop/read_article.asp?id=22628

差不多,自己先在vb中测试成功后,在放到asp中测试
# 5
这句是废话 If Rs("user_id") <> strId Or Rs("user_pw") <> strPws Then ,另外组件注册了没有?
hewei2003-为为 at 2007-10-22 > top of Msdn China Tech,visual basic,COM/DCOM/COM+...
# 6
Public Function CheckUser(strId As String, strPws As String) As String
该成
Public Function CheckUser(byval trId As String, byval strPws As String) As String
bdhh-Silent at 2007-10-22 > top of Msdn China Tech,visual basic,COM/DCOM/COM+...
# 7
上面各位已经讲了很多了,我再来解释一下:

由于ASP中使用VBSCRIPT,该语言没有数据类型的区别,一律都是VARIANT,所以,你取得的strUId 类型是VARIANT。将VARIANT直接传递到你的CHECKUSER,就会发生“类型不匹配”错误。这种情况很好办,如supergreenbean(超级绿豆) 所说,你把CHECKUSER的定义改为

Public Function CheckUser(strId As VARIANT, strPws As VARIANT) As VARIANT

就行了。或者,不要这些AS也行。

---------------------------------------
另外,附送以下忠告:
你的CHEKCUSER方法中有一个非常非常古老的安全漏洞,使得任何人都可以随意登录你的系统。漏洞在于你的SQL语句写法,试想,如果有人把用户名或密码写成:

' or ''='

他不就能毫无阻碍地登录你的系统么!看懂了没?
junglerover-灌木丛 at 2007-10-22 > top of Msdn China Tech,visual basic,COM/DCOM/COM+...
# 8
不好意思,刚才没仔细看,原来你还是有继续判断返回结果的啊,那么这个古老的安全漏洞不存在了。恭喜恭喜!
junglerover-灌木丛 at 2007-10-22 > top of Msdn China Tech,visual basic,COM/DCOM/COM+...
# 9
非常感谢各位.我来迟了!
Sunnyyuan-Sunny at 2007-10-22 > top of Msdn China Tech,visual basic,COM/DCOM/COM+...
# 10
Public Function CheckUser(strId As String, strPws As String) As String 改成
Public Function CheckUser(strId As String, strPws As String) As variant
重新编译组件!

在asp中调用该组件就不会出现“类型不匹配”的错误了!
manager6608112-学生 at 2007-10-22 > top of Msdn China Tech,visual basic,COM/DCOM/COM+...
# 11
实际上就像junglerover(灌木丛)说的那样,原因是因为脚本语言只使用VARIANT。但只有引用传递时候才会出现问题,值传递不会有问题,而且返回值也不用改,所以你可以改成:
Public Function CheckUser(byval strId As String, byref strPws As variant) As String
bdhh-Silent at 2007-10-22 > top of Msdn China Tech,visual basic,COM/DCOM/COM+...