Cómo ejecutar un procedimiento almacenado (mediante la sintaxis CALL de ODBC) y procesar códigos de retorno y parámetros de salida (OLE DB)
Los procedimientos almacenados de SQL Server pueden incluir códigos de retorno y parámetros de salida de tipo entero. 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 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
Cree una instrucción SQL que utilice la secuencia de escape ODBC CALL. La instrucción debe usar marcadores de parámetros para cada parámetro de entrada, de entrada/salida y de salida, así como para el valor devuelto por el procedimiento (si existe). Para los parámetros de entrada, puede usar los marcadores de parámetros o codificar los valores.
Cree un conjunto de enlaces (uno para cada creador de parámetro) mediante una matriz de estructura 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_A.cpp. Puede descargar un archivo que contiene el ejemplo en la página de descargas de SQL Server en MSDN.
Este ejemplo se desarrolló utilizando Microsoft Visual C++ 2005.
Nota de seguridad |
|---|
Siempre que sea posible, utilice 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