データ バッファーの長さ

アプリケーションは、BufferLength または同様の名前の引数で、データ バッファーのバイト長をドライバーに渡します。 たとえば、次の SQLBindCol の呼び出しでは、アプリケーションは ValuePtr バッファー (sizeof(ValuePtr)) の長さを指定します。

SQLCHAR      ValuePtr[50];  
SQLINTEGER   ValueLenOrInd;  
SQLBindCol(hstmt, 1, SQL_C_CHAR, ValuePtr, sizeof(ValuePtr), &ValueLenOrInd);  

ドライバーは、出力文字列引数を持つ任意の関数のバッファー長引数で、文字数ではなくバイト数を常に返します。

データ バッファーの長さは出力バッファーにのみ必要です。ドライバーは、バッファーの末尾を越えて書き込みを回避するためにそれらを使用します。 ただし、ドライバーは、バッファーに文字やバイナリ データなどの可変長データが含まれている場合にのみ、データ バッファーの長さを確認します。 バッファーに整数や日付構造などの固定長データが含まれている場合、ドライバーはデータ バッファーの長さを無視し、バッファーがデータを保持するのに十分な大きさであると想定します。つまり、固定長データが切り捨てられることはありません。 そのため、アプリケーションでは、固定長データに十分な大きさのバッファーを割り当てることが重要です。

データ以外の出力文字列の切り捨てが発生した場合 (SQLGetCursorName に対して返されるカーソル名など)、バッファー長引数で返される長さは、可能な最大文字数です。

ドライバーがこれらのバッファーに書き込まないので、入力バッファーのデータ バッファーの長さは必要ありません。

このセクションでは、次のトピックを扱います。