Como executar um procedimento armazenado (usando sintaxe de RPC) e processar códigos de retorno e parâmetros de saída (OLE DB)
Os procedimentos armazenados do SQL Server podem ter códigos de retorno e parâmetros de saída de número inteiro. Os códigos de retorno e os parâmetros de saída são enviados no último pacote do servidor e, portanto, não estão disponíveis para o aplicativo enquanto o conjunto de linhas não é completamente liberado. Se o comando retornar vários resultados, os dados dos parâmetros de saída estarão disponíveis quando IMultipleResults::GetResult retornar DB_S_NORESULT ou quando a interface IMultipleResults for completamente liberada, o que ocorrer primeiro.
Para processar códigos de retorno e parâmetros de saída
Construa uma instrução SQL que usa a sequência de escape RPC.
Chame o método ICommandWithParameters::SetParameterInfo para descrever parâmetros ao provedor. Preencha as informações sobre o parâmetro em uma matriz de estruturas PARAMBINDINFO.
Crie um conjunto de associações (um para cada criador de parâmetro) usando uma matriz de estruturas DBBINDING.
Crie um acessador para os parâmetros definidos usando o método IAccessor::CreateAccessor. CreateAccessor cria um acessador de um conjunto de associações.
Preencha a estrutura DBPARAMS.
Chame o comando Execute (neste caso, uma chamada para um procedimento armazenado).
Processe o conjunto de linhas e libere-o usando o método IRowset::Release.
Processe os valores de código de retorno e de parâmetro de saída recebidos do procedimento armazenado.
Exemplo
O exemplo mostra o processamento de um conjunto de linhas, de um código de retorno e de um parâmetro de saída. Conjuntos de resultados não são processados. A seguir está o exemplo de procedimento armazenado usado pelo aplicativo.
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
O código de exemplo completo está no arquivo InitializeAndEstablishConnection_B.cpp. Você pode baixar um arquivo que contém o exemplo da página de Downloads do SQL Server no MSDN.
Esse exemplo foi desenvolvido com o Microsoft Visual C++ 2005.
Observação sobre segurança |
---|
Quando possível, use a Autenticação do Windows. Se a Autenticação do Windows não estiver disponível, solicite aos usuários que digitem suas credenciais em tempo de execução. Evite armazenar as credenciais em um arquivo. Se for necessário manter as credenciais, criptografe-as com a API de criptografia Win32. |