Partager via


Procédure : exécuter une procédure stockée (avec la syntaxe ODBC CALL) 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 accessibles à 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 des paramètres 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 ODBC CALL. L'instruction doit utiliser des marqueurs de paramètres pour chaque paramètre d'entrée/sortie et de sortie, ainsi que pour la valeur de retour de la procédure (le cas échéant). Pour les paramètres d'entrée, vous pouvez utiliser les marqueurs de paramètres ou coder de manière irréversible les valeurs.

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

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

  4. Remplissez la structure DBPARAMS.

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

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

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