Nejsem obeznámen s programováním ODBC, ale na první pohled vidím jeden problém, že předpokládáte, že délka vašich dat je násobkem velikosti vaší vyrovnávací paměti. Není však zaručeno, že se poslední čtení vrátí přesně 500 bajtů dat.
Něco takového bys měl napsat. Možná:
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;
Věnujte prosím několik minut kontrole Použití délky /Hodnoty indikátoru za účelem kontroly délky/hodnoty indikátoru se používá.