Ik ben niet bekend met ODBC-programmering, maar op het eerste gezicht is een probleem dat ik kan zien, dat je ervan uitgaat dat je gegevenslengte een veelvoud is van je buffergrootte. Maar het laatst gelezen is niet gegarandeerd precies 500 bytes aan gegevens.
Zoiets zou je moeten schrijven. Misschien:
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;
Neem een paar minuten de tijd om Gebruikslengte te bekijken /Indicator Waarden om te controleren hoe de lengte/indicatorwaarde wordt gebruikt.