結果セットは作成されましたか?

ほとんどの場合、アプリケーション プログラマは、アプリケーションが実行するステートメントによって結果セットが作成されるかどうかを知っています。 これは、アプリケーションがプログラマによって記述されたハードコーディングされた SQL ステートメントを使用する場合です。 通常、アプリケーションが実行時に SQL ステートメントを構築する場合です。プログラマは、SELECT ステートメントまたは INSERT ステートメントのどちらが構築されているかを示すコードを簡単に含めることができます。 いくつかの状況では、プログラマはステートメントが結果セットを作成するかどうかを知ることができません。 これは、ユーザーが SQL ステートメントを入力して実行する方法をアプリケーションが提供する場合に当てはまります。 アプリケーションが実行時にプロシージャを実行するステートメントを構築する場合にも当てはまります。

このような場合、アプリケーションは SQLNumResultCols を呼び出して、結果セット内の列数を決定します。 これが 0 の場合、ステートメントは結果セットを作成しませんでした。他の数値の場合は、ステートメントは結果セットが作成しました。

アプリケーションは、ステートメントの準備または実行後にいつでも SQLNumResultCols を呼び出すことができます。 ただし、一部のデータ ソースでは、準備されたステートメントによって作成される結果セットを簡単に記述できないため、ステートメントの準備後、SQLNumResultCols が実行前に呼び出されると、パフォーマンスが低下します。

一部のデータ ソースでは、SQL ステートメントが結果セットで返す行数の決定もサポートされています。 これを行うために、アプリケーションは SQLRowCount を呼び出します。 行数が表す内容は、SQLGetInfo の呼び出しによって返される SQL_DYNAMIC_CURSOR_ATTRIBUTES2、SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2、SQL_KEYSET_CURSOR_ATTRIBUTES2、または SQL_STATIC_CURSOR_ATTRIBUTES2 オプション (カーソルのタイプに応じて) の設定によって示されます。 このビットマスクは、返される行数が正確か近似であるか、またはまったく使用できないかを、カーソルの種類ごとに示します。 静的カーソルまたはキーセットドリブン カーソルの行数が、SQLBulkOperations または SQLSetPos を使用して行われた変更の影響を受けるかどうか、または位置指定された更新または削除ステートメントによって影響を受けるかどうかは、前に示した同じオプション引数によって返される他のビットによって異なります。 詳細については、「SQLGetInfo 関数の説明」を参照してください。