如何执行存储过程(使用 ODBC CALL 语法)以及处理返回代码和输出参数 (OLE DB)
SQL Server 存储过程可以有整数返回代码和输出参数。返回代码和输出参数位于从服务器发送的最后一个数据包中,因此直到行集完全释放时它们才可供应用程序使用。如果命令返回多个结果,则输出参数数据在 IMultipleResults::GetResult 返回 DB_S_NORESULT 时或 IMultipleResults 接口完全释放时(以二者中最先发生的为准)可用。
处理返回代码和输出参数
构造使用 ODBC CALL 转义序列的 SQL 语句。该语句应当对每个输入/输出和输出参数以及过程返回值(如果有)使用参数标记。对于输入参数值,可以使用参数标记或对值进行硬编码。
通过使用 DBBINDING 结构数组创建一组绑定(每个参数标记一个)。
通过使用 IAccessor::CreateAccessor 方法为定义的参数创建取值函数。CreateAccessor 将从一组绑定创建取值函数。
填写 DBPARAMS 结构。
调用 Execute 命令(在这种情况下是调用存储过程)。
通过使用 IRowset::Release 方法处理行集并释放它。
处理从存储过程接收的返回代码和输出参数值。
示例
此示例说明了如何处理行集、返回代码和输出参数。不处理结果集。下面是应用程序使用的示例存储过程。
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_A.cpp 中。您可以从 MSDN 上的 SQL Server Downloads(SQL Server 下载)页下载包含该示例的存档。
该示例是使用 Microsoft Visual C++ 2005 开发的。
安全说明 |
---|
请尽可能使用 Windows 身份验证。如果 Windows 身份验证不可用,请在运行时提示用户输入其凭据。不要将凭据存储在一个文件中。如果必须保存凭据,则应当用 Win32 Crypto API(Win32 加密 API)进行加密。 |