ODBC CALL 構文を使用してストアド プロシージャを実行し、リターン コードと出力パラメーターを処理する方法 (OLE DB)
SQL Server のストアド プロシージャでは、整数のリターン コードと出力パラメーターを使用できます。リターン コードと出力パラメーターはサーバーからの最後のパケットで送信されるため、行セットが完全に解放されるまでアプリケーションでは使用できません。コマンドが複数の結果を返す場合は、IMultipleResults::GetResult が DB_S_NORESULT を返すとき、または IMultipleResults インターフェイスが完全に解放されるとき、いずれか早いほうの時点で、出力パラメーター データを使用できるようになります。
リターン コードと出力パラメーターを処理するには
ODBC CALL エスケープ シーケンスを使用する SQL ステートメントを作成します。このステートメントでは、各入出力パラメーター、出力パラメーター、およびプロシージャの戻り値 (存在する場合) に対してパラメーター マーカーを使用する必要があります。入力パラメーターの場合は、パラメーター マーカーを使用するか、値をハード コーディングできます。
DBBINDING 構造体の配列を使用して、各パラメーター マーカーに 1 つずつ一連のバインドを作成します。
IAccessor::CreateAccessor メソッドを使用して、定義済みパラメーターのアクセサーを作成します。アクセサーは、一連のバインドから CreateAccessor によって作成されます。
DBPARAMS 構造体にデータを格納します。
Execute コマンド (この場合はストアド プロシージャへの呼び出し) を呼び出します。
行セットを処理し、IRowset::Release メソッドを使用して行セットを解放します。
ストアド プロシージャから受信したリターン コードと出力パラメーターの値を処理します。
使用例
次の例は、行セット、リターン コード、および出力パラメーターの処理を示しています。結果セットは処理されません。アプリケーションで使用するサンプル ストアド プロシージャは次のとおりです。
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 を使用して暗号化してください。 |