Jeg er ikke bekendt med ODBC-programmering, men ved første øjekast er et problem, jeg kan se, at du antager, at din datalængde er multiplum af din bufferstørrelse. Men den sidste læsning er ikke garanteret at returnere præcis 500 bytes data.
Du burde skrive sådan noget. Måske:
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;
Brug et par minutter på at gennemgå Using Length /Indikatorværdier for at kontrollere, hvordan længde/indikatorværdi bruges.