Non ho familiarità con la programmazione ODBC, ma a prima vista, un problema che posso vedere è che presumi che la lunghezza dei tuoi dati sia multipla della dimensione del tuo buffer. Ma non è garantito che l'ultima lettura restituisca esattamente 500 byte di dati.
Dovresti scrivere qualcosa del genere. Forse:
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;
Ti preghiamo di dedicare qualche minuto per esaminare Uso della lunghezza /Valori indicatore per verificare come il valore di lunghezza/indicatore viene utilizzato.