Compartilhar via


Como executar um procedimento armazenado (usando a sintaxe ODBC CALL) 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 a interface IMultipleResults for completamente liberada, o que ocorrer primeiro.

Para processar códigos de retorno e parâmetros de saída

  1. Construa uma instrução SQL que use a seqüência de escape ODBC CALL. A instrução deve usar marcadores de parâmetro para cada entrada/saída e parâmetro de saída, e também para o valor de retorno de procedimento (se houver). Para parâmetros de entrada, você pode usar os marcadores de parâmetro ou codificar os valores.

  2. Crie um conjunto de associações (um para cada criador de parâmetro) usando uma matriz de estrutura DBBINDING.

  3. Crie um acessador para os parâmetros definidos usando o método IAccessor::CreateAccessor. CreateAccessor cria um acessador de um conjunto de associações.

  4. Preencha a estrutura DBPARAMS.

  5. Chame o comando Execute (neste caso, uma chamada para um procedimento armazenado).

  6. Processe o conjunto de linhas e libere-o usando o método IRowset::Release.

  7. 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 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

O código de exemplo completo está no arquivo InitializeAndEstablishConnection_A.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çaObservaçã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.