一般的なルールとして、 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 のサポート
日付/時刻型の結果列の値は、「 SQL から C への変換」の説明に従って変換されます。time 列と datetimeoffset 列を対応する構造体 (SQL_SS_TIME2_STRUCT および SQL_SS_TIMESTAMPOFFSET_STRUCT) として取得するには、 TargetType を SQL_C_DEFAULT または SQL_C_BINARYとして指定する必要があります。
詳細については、「 Date and Time Improvements (ODBC)」を参照してください。
大きな CLR UDT に対する SQLBindCol のサポート
SQLBindCol では、大きな CLR ユーザー定義型 (UDT) がサポートされています。 詳細については、「 Large CLR ユーザー定義型 (ODBC)を参照してください。