ストレージの割り当て

アプリケーションでは、SQL ステートメントの実行前後に、結果用のストレージを割り当てることができます。アプリケーションで最初に SQL ステートメントを準備または実行すると、結果のストレージを割り当てる前に、結果セットに関する情報を取得できます。たとえば、結果セットが不明であれば、アプリケーションでは、列にストレージを割り当てる前に、列数を取得する必要があります。

データの列にストレージを割り当てるには、アプリケーションから次の情報を渡して SQLBindCol を呼び出します。

  • データの変換先のデータ型。

  • データの出力バッファのアドレス。

    アプリケーションではこのバッファを割り当てる必要があります。このバッファは、変換後の形式でデータを保持するのに十分な大きさを確保する必要があります。

  • 出力バッファの長さ。

    この値は、返されるデータが C の固定幅データ (整数、実数、日付構造体など) の場合は無視されます。

  • 使用できるデータのバイト数を返すストレージ バッファのアドレス。

また、アプリケーションは、結果セットの列をプログラム変数の配列にバインドして、結果セットの行をブロック単位でフェッチする機能をサポートすることもできます。配列のバインドには、次の 2 種類があります。

  • 列方向のバインドは、各列を変数の独自の配列にバインドすると終了します。

    列方向のバインドは、Attribute を SQL_ATTR_ROW_BIND_TYPE に、ValuePtr を SQL_BIND_BY_COLUMN に設定し、SQLSetStmtAttr を呼び出して指定します。すべての配列には、同じ数の要素を保持する必要があります。

  • 行方向のバインドは、SQL ステートメント内のすべてのパラメータを 1 単位として、パラメータの各変数を保持する構造体の配列にバインドすると終了します。

    行方向のバインドは、Attribute を SQL_ATTR_ROW_BIND_TYPE に、ValuePtr を結果セットの列を受け取る変数が保持される構造体のサイズに設定し、SQLSetStmtAttr を呼び出して指定します。

また、アプリケーションでは、SQL_ATTR_ROW_ARRAY_SIZE を列または行の配列内の要素数に設定し、SQL_ATTR_ROW_STATUS_PTR と SQL_ATTR_ROWS_FETCHED_PTR も設定します。

関連項目

概念