这个例子将展示一个存储过程必需的步骤,该过程带有两个参数。存储过程的参数可以是输入,输出或输入输出参数。在绝大多数的情况下,ODBC 驱动程序可以自动确定参数的类型并正确指定其 Direction 属性。本例执行的是 sp_password 过程,该过程可以在 SQL Server 系统中改变用户的密码。假定所要改变的密码属于当前用户,因为只有系统管理员才能修改用户的密码。
这个过程接受两个输入参数并返回一个返回值。可以使用 Execute 方法运行该查询,但返回值将会丢失。这样就没有简单的方法可以得知密码的改变是否成功。为了获取返回值并创建一个可以重复执行修改密码的 rdoQuery,可以用以下代码:
Dim CPw As rdoQuery, QSQL As String
QSQL$ = "{ ? = call sp_password (?, ?) }"
接下来的一行代码创建了 rdoQuery,并将其命名为 SetPassword。SQL 属性设置为上面所定义的 QSQL 查询。这行代码只需执行一次。新的 rdoQuery 对象会自动追加到 rdoQueries 集合,可以重复地调用它。
Set CPw = cn.CreateQuery("SetPassword",QSQL$)
下面一步设置了 Direction 属性,表明参数是输入、输出还是输入输出参数。缺省的 Direction 是 rdParamInput,但在绝大多数情况下根本不需要设置 Direction 属性,因为 ODBC 驱动程序可以通过存储过程确定这个值。
参数的序数取决于它们在 SQL 语句中出现的次序。在本例中,“0”号参数是返回值 (? = ),第一号是第一个输入参数,第二号是第二个输入参数。可以看出来,rdoParameters 集合是从零开始计数的。以下的代码引用了 rdoParameters 集合,该集合是 rdoQuery 对象的缺省集合。
Cpw.rdoParameters(0).Direction = rdParamReturnValue
接下来的这一步设置了二个输入参数,RDO 在查询执行时将它们插入到该查询中。请注意,rdoParameters 是缺省的集合,因此在以下代码中被略去了。
Cpw(1) = "clyde" '
设置第一个输入参数。Cpw(2) = "framis" '
设置第二个输入参数。
在参数的传递方向和值都设置好之后,如果没有返回值,可以使用 Execute 方法运行该查询,如果这个过程包括一个或多个 SELECT 语句,使用 OpenResultset 方法:
Cpw.Execute()
过程执行完之后,立即检查 rdoParameters 集合以获取返回值:
If Cpw.rdoParameters(0) <> 0 Then
Msgbox "Could not change password"
End If