Cómo ejecutar un procedimiento almacenado (mediante la sintaxis RPC) y procesar códigos de retorno y parámetros de salida (OLE DB)
Los procedimientos almacenados de SQL Server pueden tener códigos de retorno de tipo entero y parámetros de salida. Los códigos de retorno y parámetros de salida se envían en el último paquete del servidor y, por tanto, no están disponibles para la aplicación hasta que se haya lanzado al mercado completamente el conjunto de filas. Si el comando devuelve varios resultados, los datos del parámetro de salida están disponibles cuando IMultipleResults::GetResult devuelve DB_S_NORESULT, o cuando se lanza al mercado completamente la interfaz IMultipleResults, lo que se produzca en primer lugar.
Para procesar códigos de retorno y parámetros de salida
Construya una instrucción SQL que use la secuencia de escape RPC.
Llame al método ICommandWithParameters::SetParameterInfo para describir los parámetros al proveedor. Rellene la información de los parámetros en una matriz de estructuras PARAMBINDINFO.
Cree un conjunto de enlaces (uno para cada creador de parámetro) mediante una matriz de estructuras DBBINDING.
Cree un descriptor de acceso para los parámetros definidos mediante el método IAccessor::CreateAccessor. CreateAccessor crea un descriptor de acceso a partir de un conjunto de enlaces.
Rellene la estructura DBPARAMS.
Llame al comando Execute (en este caso, una llamada a un procedimiento almacenado).
Procese el conjunto de filas y libérelo mediante el método IRowset::Release.
Procese el código de retorno y los valores de parámetro de salida que se reciben del procedimiento almacenado.
Ejemplo
En este ejemplo se muestra cómo se procesan un conjunto de filas, un código de retorno y un parámetro de salida. No se procesan los conjuntos de resultados. Éste es el procedimiento almacenado de ejemplo que usó la aplicación.
USE AdventureWorks
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
El código de ejemplo completo se encuentra en el archivo InitializeAndEstablishConnection_B.cpp. Puede descargar un archivo que contiene el ejemplo en la página de descargas de SQL Server en MSDN.
Este ejemplo se desarrolló con Microsoft Visual C++ 2005.
Nota de seguridad |
|---|
Siempre que sea posible, use la autenticación de Windows. Si la autenticación de Windows no está disponible, solicite a los usuarios que escriban sus credenciales en tiempo de ejecución. No guarde las credenciales en un archivo. Si tiene que conservar las credenciales, debería cifrarlas con la API de criptografía de Win32. |
Nota de seguridad