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
が返され、"string data;右切り捨て" 警告が発行されます。 StrLen_or_IndPtr
引数には、バッファー内に格納されている文字数とバイト数が含まれます。
SQLBindCol による機能強化された日付と時刻のサポート
日付/時刻型の結果列の値は、「SQL から C への変換」の説明に従って変換されます。time 列と datetimeoffset 列を対応する構造体 (SQL_SS_TIME2_STRUCT
および SQL_SS_TIMESTAMPOFFSET_STRUCT) として取得するには、TargetType を または SQL_C_BINARY
としてSQL_C_DEFAULT
指定する必要があることに注意してください。
詳細については、「 日付と時刻の機能強化 (ODBC)」を参照してください。
SQLBindCol による大きな CLR UDT のサポート
SQLBindCol では 、大きな CLR ユーザー定義型 (UDT) がサポートされています。 詳細については、「 大きな CLR User-Defined型 (ODBC)」を参照してください。