我建了一个存储过程: 
CREATE PROCEDURE up_getcardbycardno ( 
@cardno varchar(20), 
@hsid varchar(20) 

AS 
select * from h_card where cardno=@cardno and hsid=@hsid 
GO 
'在VB中这样调用 
Private Sub Command1_Click() 
Dim g_cmd2 As New ADODB.Command 
On Error GoTo Err1 
With g_cmd2 
.ActiveConnection = g_conn.ConnectionString 
.CommandText = "up_getcardbycardno" 
.CommandType = adCmdStoredProc 
'建立参数列表 
.Parameters.Append g_cmd2.CreateParameter( _ 
"@RETURN_VALUE", adInteger, adParamReturnValue) 
.Parameters.Append g_cmd2.CreateParameter( _ 
"@cardno", adVarChar, adParamInput, 20,Trim(txtCardNo2.Text) 
.Parameters.Append g_cmd2.CreateParameter( _ 
"@hsid", adVarChar, adParamInput, 20,Trim(txtHSID2.Text)) 
End With Dim objRS As new adodb.Recordset 
'执行存储过程,返回RecordSet 
Set objRS = g_cmd2.Execute() 
MsgBox objRS.RecordCount 
Exit Sub 
Err1: 
closeRec objRS '关闭recordset 
MsgBox "错误! " & err.Description, vbOKOnly + vbInformation, "提示" 
End Sub 执行这个后,并没有返回一个结果集。objRS.RecordCount=-1,这是为什么啊(实际中在数据库存在要查的数据,即是没有这个数据,也不应为-1,)。调试上面的代码并没有报错。郁闷了很长时间,从网上搜好像和我写的也差不多,实在不知是什么原因。 
后来使用下面的第二种方法,倒是可以返回,如: 
Set iRs = g_conn.Execute("up_getcardbycardno'" & Trim(txtCardNo2.Text) & "','" & Trim(txtHSID2.Text) & "'") 
MsgBox iRs.RecordCount 
同一个存储过程,怎么会这样?我想是不是我传的参数有问题,请高手解惑啊。按照第二中办法可以成功,问题是,第二种如果需要返回参数的话,该怎么写?第一种方法错在那里呢?

解决方案 »

  1.   

    Parameters.Append g_cmd2.CreateParameter( _ 
    "@RETURN_VALUE", adInteger, adParamReturnValue) 
    .Parameters.Append g_cmd2.CreateParameter( _ 
    "@cardno", adVarChar, adParamInput, 20,Trim(txtCardNo2.Text) 
    .Parameters.Append g_cmd2.CreateParameter( _ 
    "@hsid", adVarChar, adParamInput, 20,Trim(txtHSID2.Text)) 改为
    parameters(1)=.....
    parameters(2)=......
    Set objRS = g_cmd2.Execute如果你的RS要得到返回集,你的连接游标要用本地游标才成。
    如果你用的服务器游标,recordcount返回的就是-1