私はODBCプログラミングに精通していませんが、一見したところ、データ長がバッファサイズの倍数であると想定していることがわかります。ただし、最後の読み取りで正確に返されるとは限りません。 500バイトのデータ。
あなたはそのような何かを書くべきです。多分:
string str;
SQLCHAR buf[500];
SQLLEN cbLeft; // #bytes remained
while ((SQL_SUCCEEDED(SQLGetData(StmtHandle,
colnum,
SQL_C_BINARY,
buf,
sizeof(buf),
&cbLeft))))
// ^^^^^^^
{
string data(reinterpret_cast< const char* >(buf),
reinterpret_cast< const char* >(buf)
+ cbLeft);
// ^^^^^^
str = str + data;
長さの使用を確認するために数分かかります/インジケーター値 長さ/インジケーターの値を確認するため が使用されます。