SQLBindCol

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

一般的なルールとして、SQLBindCol を使用してデータ変換を行う場合の影響を考慮してください。 バインドによる変換はクライアント側のプロセスなので、たとえば文字型の列にバインドされた浮動小数点値を取得すると、ドライバーは行をフェッチするときにローカルで浮動小数点型から文字型への変換を行います。 Transact-SQL CONVERT 関数を使用して、データ変換のコストをサーバーに配置できます。

SQL Server のインスタンスは、1 回のステートメント実行で複数の結果行セットを返すことができます。 各結果セットは個別にバインドされている必要があります。 複数の結果セットのバインドの詳細については、「SQLMoreResults」を参照してください

開発者は、TargetTypeSQL_C_BINARYを使用して、SQL Server 固有の C データ型に列をバインドできます。 SQL Server 固有の型にバインドされた列は移植できません。 定義された SQL Server 固有の ODBC C データ型は、DB-Library の型定義と一致します。アプリケーションを移植する DB ライブラリ開発者は、この機能を利用できます。

レポート データの切り捨ては、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_TIMESTAMPOFFStandard EditionT_STRUCT) として取得するには、TargetType をSQL_C_DEFAULTまたはSQL_C_BINARYとして指定する必要があります。

詳細については、「日付と時刻の機能強化 (ODBC)」を参照してください

SQLBindCol による大きな CLR UDT のサポート

SQLBindCol では、大きな CLR ユーザー定義型 (UDT) がサポートされています。 詳細については、「大きな CLR ユーザー定義型 (ODBC)」を参照してください

参照

SQLBindCol 関数
ODBC API 実装の詳細