結果セットの列のバインド
アプリケーションは、結果セットの選択した数の列をバインドできます。列が一切バインドされない場合もあります。 データ行がフェッチされると、ドライバーはバインドされた列のデータをアプリケーションに返します。 アプリケーションが結果セット内のすべての列をバインドするかどうかは、アプリケーションによって異なります。 たとえば、通常、レポートを生成するアプリケーションは固定形式です。このようなアプリケーションは、レポートで使用されるすべての列を含む結果セットを作成し、これらのすべての列のデータをバインドして取得します。 データがいっぱいの画面を表示するアプリケーションでは、表示する列をユーザーが決定できる場合があります。このようなアプリケーションは、ユーザーが必要とするすべての列を含む結果セットを作成しますが、ユーザーが選択した列に対してのみデータをバインドして取得します。
SQLGetData を呼び出すことで、バインドされていない列からデータを取得できます。 これは通常、長いデータを取得するために呼び出されます。これは多くの場合、1 つのバッファーの長さを超え、部分で取得する必要があります。
行がフェッチされた後でも、列はいつでもバインドできます。 ただし、新しいバインドは、次に行がフェッチされるまで有効になりません。既にフェッチされている行のデータには適用されません。
変数は、別の変数が列にバインドされるまで、SQLBindCol を null ポインターとともに変数のアドレスとして呼び出してバインドを解除するまで、すべての列が SQL_UNBIND オプションで SQLFreeStmt を呼び出してバインド解除されるまで、またはステートメントが解放されるまで、列にバインドされたままになります。 このため、バインドされている限り、すべてのバインドされた変数が有効なままであることをアプリケーションで確認する必要があります。 詳細については、「バッファーの割り当てと解放」を参照してください。
列バインドはステートメント構造に関連付けられた情報に過ぎないため、任意の順序で設定できます。 また、結果セットに依存しません。 たとえば、アプリケーションが次の SQL ステートメントによって生成された結果セットの列をバインドするとします。
SELECT * FROM Orders
アプリケーションが次に SQL ステートメントを実行する場合
SELECT * FROM Lines
同じステートメント ハンドルでは、最初の結果セットの列バインドは、ステートメント構造に格納されているバインディングであるため、引き続き有効です。 ほとんどの場合、これは不適切なプログラミング手法であり、避ける必要があります。 代わりに、アプリケーションは、SQL_UNBIND オプションを指定して SQLFreeStmt を呼び出して、すべての古い列のバインドを解除し、新しい列をバインドする必要があります。