Condividi tramite


Procedura: Esecuzione di una stored procedure mediante la sintassi ODBC CALL ed elaborazione di codici restituiti e parametri di output (OLE DB)

Le stored procedure di SQL Server possono includere parametri di output e codici restituiti di tipo integer. I codici restituiti e i parametri di output vengono inviati nell'ultimo pacchetto dal server e non sono pertanto disponibili all'applicazione fino al completo rilascio del set di righe. Se il comando restituisce più risultati, i dati dei parametro di output sono disponibili quando IMultipleResults::GetResult restituisce DB_S_NORESULT o l'interfaccia IMultipleResults viene completamente rilasciata, a seconda dell'evento che si verifica per primo.

Per elaborare i codici restituiti e i parametri di output

  1. Costruire un'istruzione SQL che utilizzi la sequenza di escape ODBC CALL. Nell'istruzione devono essere utilizzati indicatori di parametro per ogni parametro di input, input/output e output e per il valore restituito della procedura, se disponibile. Per i parametri di input, è possibile utilizzare gli indicatori di parametro o specificare i valori a livello di codice.

  2. Creare un set di associazioni (uno per ogni indicatore di parametro) tramite una matrice di strutture DBBINDING.

  3. Creare una funzione di accesso per i parametri definiti utilizzando il metodo IAccessor::CreateAccessor. CreateAccessor crea una funzione di accesso da un set di associazioni.

  4. Completare la struttura DBPARAMS.

  5. Chiamare il comando Execute, rappresentato in questo caso da una chiamata a una stored procedure.

  6. Elaborare il set di righe e rilasciarlo utilizzando il metodo IRowset::Release.

  7. Elaborare il codice restituito e i valori del parametro di output ricevuti dalla stored procedure.

Esempio

In questo esempio viene illustrata l'elaborazione di un set di righe, di un codice restituito e di un parametro di output. I set di risultati non vengono elaborati. Di seguito è riportata la stored procedure di esempio utilizzata dall'applicazione.

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

Il codice di esempio completo è disponibile nel file InitializeAndEstablishConnection_A.cpp. È possibile scaricare un archivio contenente l'esempio dalla pagina SQL Server Downloads del sito Web MSDN.

L'esempio è stato sviluppato utilizzando Microsoft Visual C++ 2005.

Nota sulla sicurezzaNota sulla sicurezza

Se possibile, utilizzare l'autenticazione di Windows. Se non è disponibile, verrà richiesto agli utenti di immettere le credenziali in fase di esecuzione. Evitare di archiviare le credenziali in un file. Se è necessario rendere persistenti le credenziali, è consigliabile crittografarle utilizzando Win32 Crypto API.