SQLBindCol
一般的な規則として、SQLBindCol を使用する場合、暗黙にデータ変換が行われることを考慮する必要があります。 バインドによる変換はクライアント側のプロセスなので、たとえば文字型の列にバインドされた浮動小数点値を取得すると、ドライバーは行をフェッチするときにローカルで浮動小数点型から文字型への変換を行います。 Transact-SQL CONVERT 関数を使用すると、データ変換の負荷をサーバーに移すことができます。
SQL Server のインスタンスでは、1 回のステートメントの実行に対して複数の結果セット行を返すことができます。 各結果セットは個別にバインドされている必要があります。 複数の結果セットのバインドの詳細については、「SQLMoreResults」を参照してください。
開発者は、TargetType の値に SQL_C_BINARY を指定することで、SQL Server 固有の C データ型に列をバインドできます。 SQL Server 固有の型にバインドされた列は移植できません。 また、定義済みの SQL Server 固有の ODBC C データ型は DB-Library の型定義と一致するので、アプリケーションを移植する DB-Library 開発者はこの特性を利用できます。
データの切り捨てに関する報告は、SQL Server Native Client ODBC ドライバーにとって負荷の高い処理です。 バインドされるすべてのデータ バッファーのサイズがデータを返すのに十分なサイズであれば、データの切り捨てを回避できます。 文字データの場合、文字列の終了に既定のドライバーの動作を使用するときは、データ バッファーの大きさに文字列ターミネータの領域も含める必要があります。 たとえば、SQL Server の char(5) 型の列を 5 文字の配列にバインドすると、フェッチするすべての値で切り捨てが行われます。 同じ列を 6 文字の配列にバインドすると、NULL ターミネータを格納する文字要素が用意されるため、切り捨てを回避できます。 また、SQLGetData を使用すると、長い文字データやバイナリ データを切り捨てられることなく取得できます。
大きな値データ型の場合、ユーザーが用意したバッファーの大きさが列全体の値を保持するのに十分でないと、SQL_SUCCESS_WITH_INFO が返され、"文字列データの右側が切り捨てられました" という警告が通知されます。 StrLen_or_IndPtr 引数には、バッファー内に格納されている文字数とバイト数が含まれます。
SQLBindCol による機能強化された日付と時刻のサポート
date 型または time 型の結果列の値は、「SQL から C への変換」で説明されているように変換されます。 time 列と datetimeoffset 列を、対応する構造体 (SQL_SS_TIME2_STRUCT および SQL_SS_TIMESTAMPOFFSET_STRUCT) として取得するには、TargetType を SQL_C_DEFAULT または SQL_C_BINARY として指定する必要があることに注意してください。
詳細については、「日付/時刻の強化 (ODBC)」を参照してください。
SQLBindCol による大きな CLR UDT のサポート
SQLBindCol は、大きな CLR ユーザー定義型 (UDT) をサポートしています。 詳細については、「大きな CLR ユーザー定義型 (ODBC)」を参照してください。