Je ne suis pas familier avec la programmation ODBC, mais à première vue, un problème que je peux voir est que vous supposez que la longueur de vos données est multiple de la taille de votre tampon. Mais la dernière lecture n'est pas garantie de retourner exactement 500 octets de données.
Vous devriez écrire quelque chose comme ça. Peut-être :
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;
Veuillez prendre quelques minutes pour examiner Utilisation de la longueur /Valeurs des indicateurs afin de vérifier comment la longueur/valeur de l'indicateur est utilisé.