Procedura: eseguire una stored procedure mediante la sintassi dell'istruzione RPC ed elaborare i codici restituiti e i 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 del parametro di output sono disponibili quando si verifica una delle due situazioni seguenti, indipendentemente dall'ordine: IMultipleResults::GetResult restituisce DB_S_NORESULT o l'interfaccia IMultipleResults è completamente rilasciata.
Per elaborare i codici restituiti e i parametri di output
Costruire un'istruzione SQL che utilizzi la sequenza di escape RPC.
Chiamare il metodo ICommandWithParameters::SetParameterInfo per descrivere i parametri al provider. Inserire le informazioni sul parametro in una matrice delle strutture PARAMBINDINFO.
Creare un set di associazioni (uno per ogni creatore di parametro) tramite una matrice di strutture DBBINDING.
Creare una funzione di accesso per i parametri definiti tramite il metodo IAccessor::CreateAccessor. CreateAccessor crea una funzione di accesso da un set di associazioni.
Completare la struttura DBPARAMS.
Chiamare il comando Execute, rappresentato in questo caso da una chiamata a una stored procedure.
Elaborare il set di righe e rilasciarlo utilizzando il metodo IRowset::Release.
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 si trova nel file InitializeAndEstablishConnection_B.cpp. È possibile scaricare un archivio contenente l'esempio dalla pagina SQL Server Downloads su MSDN.
L'esempio è stato sviluppato utilizzando Microsoft Visual C++ 2005.
Nota 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. |