ODBC CALL 構文を使用してストアド プロシージャを実行し、リターン コードと出力パラメーターを処理する方法 (OLE DB)

SQL Server のストアド プロシージャでは、整数のリターン コードと出力パラメーターを使用できます。リターン コードと出力パラメーターはサーバーからの最後のパケットで送信されるため、行セットが完全に解放されるまでアプリケーションでは使用できません。コマンドが複数の結果を返す場合は、IMultipleResults::GetResult が DB_S_NORESULT を返すとき、または IMultipleResults インターフェイスが完全に解放されるとき、いずれか早いほうの時点で、出力パラメーター データを使用できるようになります。

リターン コードと出力パラメーターを処理するには

  1. ODBC CALL エスケープ シーケンスを使用する SQL ステートメントを作成します。このステートメントでは、各入出力パラメーター、出力パラメーター、およびプロシージャの戻り値 (存在する場合) に対してパラメーター マーカーを使用する必要があります。入力パラメーターの場合は、パラメーター マーカーを使用するか、値をハード コーディングできます。

  2. DBBINDING 構造体の配列を使用して、各パラメーター マーカーに 1 つずつ一連のバインドを作成します。

  3. IAccessor::CreateAccessor メソッドを使用して、定義済みパラメーターのアクセサーを作成します。アクセサーは、一連のバインドから CreateAccessor によって作成されます。

  4. DBPARAMS 構造体にデータを格納します。

  5. Execute コマンド (この場合はストアド プロシージャへの呼び出し) を呼び出します。

  6. 行セットを処理し、IRowset::Release メソッドを使用して行セットを解放します。

  7. ストアド プロシージャから受信したリターン コードと出力パラメーターの値を処理します。

使用例

次の例は、行セット、リターン コード、および出力パラメーターの処理を示しています。結果セットは処理されません。アプリケーションで使用するサンプル ストアド プロシージャは次のとおりです。

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

完全なサンプル コードは、InitializeAndEstablishConnection_A.cpp ファイルにあります。このサンプルを含むアーカイブは、MSDN の SQL Server ダウンロード ページからダウンロードできます。

このサンプルは、Microsoft Visual C++ 2005 を使用して開発されています。

セキュリティに関する注意セキュリティに関する注意

可能な場合は、Windows 認証を使用します。Windows 認証が使用できない場合は、実行時に資格情報を入力するようユーザーに求めます。資格情報をファイルに保存するのは避けてください。資格情報を保存する必要がある場合は、Win32 Crypto API を使用して暗号化してください。