Ich bin mit der ODBC-Programmierung nicht vertraut, aber auf den ersten Blick sehe ich ein Problem darin, dass Sie davon ausgehen, dass Ihre Datenlänge ein Vielfaches Ihrer Puffergröße ist. Es ist jedoch nicht garantiert, dass der letzte Lesevorgang genau zurückgegeben wird 500 Byte Daten.
Du solltest so etwas schreiben. Vielleicht:
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;
Bitte nehmen Sie sich ein paar Minuten Zeit, um Using Length zu lesen /Indikatorwerte um zu prüfen, wie der Längen-/Indikatorwert ist verwendet wird.