我在一个存储过程中用到了OUTPUT参数来返回值,值是不知怎样在VB中得到这个返回值....
下面一本书上的一个类似的例子,结果返回为空....不知为什么???
想问样才能在VB中获得OUTPUT参数返回的值啊???存储过程:
CREATE PROCEDURE myproc @ioparm int OUTPUT  AS
select * from usertb
select @ioparm=1
return 100
GOVB中调用:
Dim adocmd As New ADODB.Command
Dim adors As New ADODB.Recordset
Dim param As Parameter
adocmd.ActiveConnection = "DSN=bnkio;UID=whabbit;PWD=1010"
adocmd.CommandText = "myproc"
adocmd.CommandType = adCmdStoredProc
Set param = adocmd.CreateParameter("Retrun", adInteger, adParamReturnValue, , 0)
adocmd.Parameters.Append param
Set param = adocmd.CreateParameter("Output", adInteger, adParamOutput, , 0)
adocmd.Parameters.Append param
Set adors = adocmd.Execute
If Not adors.EOF And adors.BOF Then
MsgBox CStr(adors(0))  '应返回什么?
End If
MsgBox CStr(adocmd(0))    '应返回什么?
MsgBox CStr(adocmd(1))    '应返回什么?
End Sub

解决方案 »

  1.   

    If Not adors.EOF And adors.BOF Then
    MsgBox CStr(adors(0))  '应返回什么?
    '返回第一个记录集select * from usertb中的第一条记录的第一列
    End If
    MsgBox CStr(adocmd(0))    '应返回什么?
    '返回output参数 select @ioparm=1    即1
    MsgBox CStr(adocmd(1))    '应返回什么?
    '返回存储过程返回值return 100   即100
      

  2.   

    先谢谢小马哥,
    刚才If Not adors.EOF And adors.BOF Then 写错了,应为
    If Not adors.EOF And Not adors.BOF Then
    这句是返回第一个记录集select * from usertb中的第一条记录的第一列
    但下面的两个就是返回空,郁闷死了....
    我把它们改为MsgBox CStr(adocmd!Retrun) 
    MsgBox CStr(adocmd!Output)还是空....什么都没有...是不是系统问题? 但别的语句没有事啊!!
    小马哥觉得是什么地方出了问题呢?
      

  3.   

    奇怪了,我直接copy过去就能用呀去掉下面这句试试
    Set param = adocmd.CreateParameter("Retrun", adInteger, adParamReturnValue, , 0)
    adocmd.Parameters.Append param
      

  4.   

    我这样试了一下,将
    CREATE PROCEDURE [whabbit].[hello]( @ioparm  int  OUTPUT  )
    AS
    select @ioparm=30
    GO
    VB中:
    On Error GoTo err:
    Dim adocmd As New ADODB.Command
    Dim adors As New ADODB.Recordset
    Dim param As Parameter
    adocmd.ActiveConnection = "DSN=bnkio;UID=whabbit;PWD=1010"
    adocmd.CommandType = adCmdStoredProc
    adocmd.CommandText = "[whabbit].[hello]"Set param = adocmd.CreateParameter("Output", adInteger, adParamInputOutput, , 6)
    adocmd.Parameters.Append param
    Set adors = adocmd.ExecuteMsgBox CStr(adocmd!Output)
    Exit Sub
    err:
    MsgBox err.Description返回结果是6,这是什么原因呢?
    如果这样不行,能告诉我一个别的调用方法吗?
      

  5.   

    还有:如果改成下面的
    Set param2 = adocmd.CreateParameter("Output", adInteger, adParamOutput, , 6)
    返回为空值.....
      

  6.   

    Set param = adocmd.CreateParameter("Output", adInteger, adParamInputOutput, , 6)
    把你后面的6去掉
      

  7.   

    Set param = adocmd.CreateParameter("Output", adInteger, adParamInputOutput)
      

  8.   

    为什么我用的时候
    在If Not adors.EOF And adors.BOF Then
    的时候出错
    告诉我对象关闭时不容许操作
      

  9.   

    返回存储过程OUTPUT参复和RETURN返回值的原代码
    accessQQ.com 2004-3-4 ------------ALTER PROCEDURE sp_1
    @p int output
    as
    begin 
    select * from tbluser
    set @p=@@rowcount 
    if @@error <> 0 
    return @@error 
    end------------Function returnP()Dim cmd As New ADODB.Command 
    Set cmd.ActiveConnection = CONN
    cmd.Parameters.Append cmd.CreateParameter("@P", adInteger, adParamOutput)cmd.CommandText = "sp_1" 
    cmd.CommandType = adCmdStoredProccmd.Parameters.Refresh '本句非常重要,经常会看到有网友问返回值得不到的情况,大部分是本句没有的原因 
    cmd.ExecuteDim i As IntegerFor i = 0 To cmd.Parameters.Count - 1 
    Debug.Print cmd.Parameters(i).Name & "=" & cmd.Parameters(i).Value 
    Next iSet cmd.ActiveConnection = Nothing 
    Set cmd = NothingEnd Function'----------测试---------? returnP()
    @RETURN_VALUE=0//这个参就是RETURN的返回值
    @p=2//这个是OUTPUT参数值
      

  10.   

    返回存储过程OUTPUT参复和RETURN返回值的原代码
    accessQQ.com 2004-3-4 ---------------------------------
    ALTER PROCEDURE sp_2
    @p int output,
    @p1 int,
    @p2 intas 
    set @p = @p1+@p2
    return 99
    ---------------------------------Function returnP()    Dim cmd As New ADODB.Command
        Set cmd.ActiveConnection = CONN
        '@return_value"这个参数在输入参数的最前面,名称是固定的
    cmd.Parameters.Append cmd.CreateParameter("@return_value", adInteger, adParamReturnValue)'输入和输出的参数顺序同存储过程的参数顺序    cmd.Parameters.Append cmd.CreateParameter("@p", adInteger, adParamOutput)
        
        cmd.Parameters.Append cmd.CreateParameter("@p1", adInteger, adParamInput,,1)
        cmd.Parameters.Append cmd.CreateParameter("@p2", adInteger, adParamInput,,2)    cmd.CommandText = "sp_2"
        cmd.CommandType = adCmdStoredProc    cmd.Execute    Dim i As Integer    For i = 0 To cmd.Parameters.Count - 1
            Debug.Print cmd.Parameters(i).Name & "=" & cmd.Parameters(i).Value
        Next iSet cmd.ActiveConnection = Nothing 
    Set cmd = NothingEnd Function'----------测试---------? returnP()
    @return_value=99
    @p=3
    @p2=2
    @p1=1