Partager via


Procédure : exécuter une procédure stockée (avec la syntaxe RPC) et traiter des codes de retour et des paramètres de sortie (OLE DB)

Les procédures stockées SQL Server peuvent avoir des codes de retour et des paramètres de sortie de type entier. Les codes de retour et paramètres de sortie sont envoyés dans le dernier paquet du serveur et ne sont par conséquent pas disponible à l'application tant que l'ensemble de lignes n'a pas été complètement libéré. Si la commande retourne plusieurs résultats, les données de paramètre de sortie sont disponibles lorsque IMultipleResults::GetResult retourne DB_S_NORESULT ou lorsque l'interface IMultipleResults est complètement libérée (selon l'événement qui se produit en premier).

Pour traiter des codes de retour et des paramètres de sortie

  1. Construisez une instruction SQL qui utilise la séquence d'échappement RPC.

  2. Appelez la méthode ICommandWithParameters::SetParameterInfo pour décrire les paramètres au fournisseur. Remplissez les informations de paramètre dans un tableau de structures PARAMBINDINFO.

  3. Créez un jeu de liaisons (une pour chaque fabricant de paramètre) en utilisant un tableau de structures DBBINDING.

  4. Créez un accesseur pour les paramètres définis à l'aide de la méthode IAccessor::CreateAccessor. CreateAccessor crée un accesseur à partir d'un jeu de liaisons.

  5. Remplissez la structure DBPARAMS.

  6. Appelez la commande Execute (dans ce cas, un appel à une procédure stockée).

  7. Traitez l'ensemble de lignes et libérez-le à l'aide de la méthode IRowset::Release.

  8. Traitez les valeurs de codes de retour et de paramètres de sortie reçues à partir de la procédure stockée.

Exemple

L'exemple illustre le traitement d'un ensemble de lignes, d'un code de retour et d'un paramètre de sortie. Les jeux de résultats ne sont pas traités. Voici l'exemple de procédure stockée utilisée par l'application.

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

L'exemple de code complet est dans le fichier InitializeAndEstablishConnection_B.cpp. Vous pouvez télécharger une archive contenant l'exemple à partir de la page de téléchargements SQL Server sur MSDN.

Cet exemple a été développé à l'aide de Microsoft Visual C++ 2005.

Remarque relative à la sécuritéRemarque relative à la sécurité

Si possible, utilisez l'authentification Windows. Si l'authentification Windows n'est pas disponible, invitez les utilisateurs à entrer leurs informations d'identification au moment de l'exécution. Évitez de stocker ces informations dans un fichier. Si vous devez rendre les informations d'identification persistantes, chiffrez-les avec l'API de chiffrement Win32.