次の方法で共有


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 AdventureWorks
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 を使用して暗号化してください。