获取存储过程的输出参数

在 SELECT 语句中使用与参数查询相同的方法,也可以从一个过程中获取输出参数。

获取输出参数

  1. 使用 ODBC 转义语法为输出和输出参数以及返回值建立占位符。

  2. 对于不能自动确定参数方向的 ODBC 数据源,代码必须设置每一个 rdoParameter 对象的 Direction 属性,表明该参数如何使用。

  3. 因为 ODBC 数据源不能自动(或者说是正确地)确定单独的参数的数据类型,所以在代码中必须设置每一个 rdoParameter 对象的 Type 属性,表明其数据类型。

  4. 执行该查询。

查询完全执行完毕后,从 rdoParameters 集合检索输出参数值。

编写带有输出参数的存储过程

本例执行了一个存储过程,该过程带有二个输入参数,返回二个输出参数以及一个返回值参数。注意,SQL 查询在 rdoQuery 中使用了 ODBC 语法,如果要求存储过程返回输出参数,那么这是必要的。

Dim SQL As String, MyOutputVal1 As Variant
Dim MyOutputVal2 As Variant, MyRetValue As Variant _
rs As rdoResultset
Dim Ps As rdoQuery

'使用命名自变量打开连接。
Dim cn as New rdoConnection
With cn
   .Connect = "dsn=Sequel;uid=;pwd=;database=workdb"
   .EstablishConnection Prompt:=rdDriverNoPrompt
End With

'使用 ODBC 参数自变量语法。
'注意每一个输入参数都用“?”标识,
'其中一个对应于返回值,
'两个分别对应于每一个输入参数,
'另外两个对应于每一个输出参数。

SQL = "{? = call TestOutputRS (?, ?, ?, ?) }"

'创建可以重复使用的 rdoQuerySet Ps = cn.CreateQuery("PsTest", SQL)

'为每一个输出参数和返回值参数
'设置参数 "direction"Ps(0).Direction = rdParamReturnValue
Ps(3).Direction = rdParamOutput
Ps(4).Direction = rdParamOutput

'设定输入参数值。
Ps.rdoParameters(1) = "Test%"
Ps.rdoParameters(2) = 1


'创建结果集并置入 Ps 值。
Set rs = Ps.OpenResultset(rdOpenStatic)

MyRetValue = Ps(0)     '返回值参数。
MyOutputVal1 = Ps(3) '第一个输出参数。
MyOutputVal2 = Ps(4) '第二个输出参数。