我建了一个存储过程:
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
同一个存储过程,怎么会这样?我想是不是我传的参数有问题,请高手解惑啊。按照第二中办法可以成功,问题是,第二种如果需要返回参数的话,该怎么写?第一种方法错在那里呢?
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
同一个存储过程,怎么会这样?我想是不是我传的参数有问题,请高手解惑啊。按照第二中办法可以成功,问题是,第二种如果需要返回参数的话,该怎么写?第一种方法错在那里呢?
"@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