Saya tidak terbiasa dengan pemrograman ODBC, tetapi pada pandangan pertama, satu masalah yang dapat saya lihat adalah Anda menganggap panjang data Anda kelipatan dari ukuran buffer Anda. Tetapi pembacaan terakhir tidak dijamin akan mengembalikan tepat 500 byte data.
Anda harus menulis sesuatu seperti itu. Mungkin:
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;
Harap luangkan beberapa menit untuk meninjau Menggunakan Panjang /Nilai Indikator untuk memeriksa bagaimana panjang/nilai indikator digunakan.