如何执行存储过程(使用 RPC 语法)以及处理返回代码和输出参数 (OLE DB)

SQL Server 存储过程可以有整数返回代码和输出参数。返回代码和输出参数位于从服务器发送的最后一个数据包中,因此直到行集完全释放时它们才可供应用程序使用。如果命令返回多个结果,则输出参数数据在 IMultipleResults::GetResult 返回 DB_S_NORESULT 时或 IMultipleResults 接口完全释放时(只要这两种情况中的任何一种发生)可用。

处理返回代码和输出参数

  1. 构造使用 RPC 转义序列的 SQL 语句。

  2. 调用 ICommandWithParameters::SetParameterInfo 方法以描述访问接口的参数。在 PARAMBINDINFO 结构数组中填写参数信息。

  3. 通过使用 DBBINDING 结构数组创建一组绑定(每个参数创建者一个)。

  4. 通过使用 IAccessor::CreateAccessor 方法为定义的参数创建取值函数。CreateAccessor 将从一组绑定创建取值函数。

  5. 填写 DBPARAMS 结构。

  6. 调用 Execute 命令(在这种情况下是调用存储过程)。

  7. 通过使用 IRowset::Release 方法处理行集并释放它。

  8. 处理从存储过程接收的返回代码和输出参数值。

示例

此示例说明了如何处理行集、返回代码和输出参数。不处理结果集。下面是应用程序使用的示例存储过程。

USE AdventureWorks2008R2;
GO
DROP PROCEDURE myProc;
GO

CREATE PROCEDURE myProc 
    @inparam int,
    @outparam int OUTPUT

AS
SELECT Color, ListPrice 
FROM Production.Product WHERE Size > @inparam;
SELECT @outparam = 100

IF  (@outparam > 0)
    RETURN 999
ELSE
    RETURN 888;
GO

完整的示例代码在文件 InitializeAndEstablishConnection_B.cpp 中。您可以从 MSDN 上的 SQL Server Downloads(SQL Server 下载)页下载包含该示例的存档。

该示例是使用 Microsoft Visual C++ 2005 开发的。

安全说明安全说明

请尽可能使用 Windows 身份验证。如果 Windows 身份验证不可用,请在运行时提示用户输入其凭据。不要将凭据存储在一个文件中。如果必须保存凭据,则应当用 Win32 Crypto API(Win32 加密 API)进行加密。