数据库的存储过程:
CREATE Procedure SP_GetNewOrderID
@sOrderType char(2),                 
@sNewOrderID varchar(16) output        
As
...
VB工程中的函数:
Public Function GetNewOrderID(ByVal OrderType As String) As String
    Dim conn As New Connection
    Dim cmd As New Command
    Dim NewOrderID As String
    Dim param As New Parameter
    Dim retval As Variant
   
    conn.Open GetConnStr()
    
    cmd.ActiveConnection = conn    cmd.CommandText = "SP_GetNewOrderID"    cmd.CommandType = adCmdStoredProc    '返回值    'Set param = cmd.CreateParameter("retval", adInteger, adParamReturnValue, 4)    'cmd.Parameters.Append param    '输入参数 ,OrderType为传入该函数的参数    Set param = cmd.CreateParameter("sOrderType", adChar, adParamInput, 2, OrderType)    cmd.Parameters.Append param    '输出参数    Set param = cmd.CreateParameter("sNewOrderID", adChar, adParamOutput, 16)    cmd.Parameters.Append param    Set retval = cmd.Execute()
    
    NewOrderID = cmd.Parameters("sNewOrderID").Value
    
    GetNewOrderID = NewOrderID
end function存储过程是可以确保没错的。可是得到的函数返回值为空,不知为什么

解决方案 »

  1.   

    参考
    http://blog.csdn.net/online/archive/2004/08/05/66376.aspx到底是返回值还是输出参数?
      

  2.   

    这样看看
    mConn.CursorLocation = adUseClient '设置为客户端代码已经测试,没有问题Set param = cmd.CreateParameter("sNewOrderID", advarChar, adParamOutput, 16)
      

  3.   

    好了好了。谢谢 online(龙卷风V2.0--再战江湖)
    我加了 mConn.CursorLocation = adUseClient '设置为客户端
    马上就可以了,不知为什么要这样设置?
      

  4.   

    如果使用Client端的Cursor,而且不是ForwardOnly的Recordset,它会把所有的资料都
    准备好而後传回Client端