ステートメント ハンドル
ステートメントは、SELECT * FROM Employee などの SQL ステートメントと考えられるのが最も簡単です。 ただし、ステートメントは単なる SQL ステートメントではなく、ステートメントによって作成された結果セットやステートメントの実行時に使用されるパラメーターなど、その SQL ステートメントに関連付けられているすべての情報で構成されます。 ステートメントには、アプリケーション定義の SQL ステートメントも必要ありません。 たとえば、SQLTables などのカタログ関数がステートメントで実行されると、テーブル名の一覧を返す定義済みの SQL ステートメントが実行されます。
各ステートメントは、ステートメント ハンドルによって識別されます。 ステートメントは 1 つの接続に関連付けられ、その接続には複数のステートメントを使用できます。 一部のドライバーでは、サポートされているアクティブなステートメントの数が制限されます。SQLGetInfo の SQL_MAX_CONCURRENT_ACTIVITIES オプションは、ドライバーが 1 つの接続でサポートするアクティブなステートメントの数を指定します。 ステートメントは、結果が保留中の場合、結果セットまたは INSERT、UPDATE、または DELETE ステートメントの影響を受ける行の数、または SQLPutData への複数の呼び出しでデータが送信されている場合にアクティブに定義されます。
ODBC (ドライバー マネージャーまたはドライバー) を実装するコードの一部内で、ステートメント ハンドルは、次のようなステートメント情報を含む構造体を識別します。
ステートメントの状態
現在のステートメント レベルの診断
ステートメントのパラメーターおよび結果セット列にバインドされているアプリケーション変数のアドレス
各ステートメント属性の現在の設定
ステートメント ハンドルは、ほとんどの ODBC 関数で使用されます。 特に、パラメーターと結果セット列 (SQLBindParameter と SQLBindCol)、ステートメントの準備と実行 (SQLPrepare、SQLExecute、SQLExecDirect)、メタデータの取得 (SQLColAttribute と SQLDescribeCol)、結果のフェッチ (SQLFetch)、診断の取得 (SQLGetDiagField および SQLGetDiagRec) を行うために関数で使用されます。 また、カタログ関数 (SQLColumns、SQLTables など) やその他の多くの関数でも使用されます。
ステートメント ハンドルは SQLAllocHandle で割り当てられ、SQLFreeHandle で解放されます。