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