Я использую ODBC SQLGetData для извлечения строковых данных, используя 256-байтовый буфер по умолчанию.Если буфер слишком короткий, я выделяю новый буфер, достаточно большой для строки, и снова вызываю SQLGetData ().
Кажется, что вызов этого параметра во второй раз возвращает только то, что осталось после последнего вызова,а не все поле.
Есть ли способ «сбросить» это поведение, чтобы SQLGetData возвращала все поле во второй буфер?
char buffer[256];
SQLLEN sizeNeeded = 0;
SQLRETURN ret = SQLGetData(_statement, _columnIndex, SQL_C_CHAR, (SQLCHAR*)buffer, sizeof(buffer), &sizeNeeded);
if(ret == SQL_SUCCESS)
{
return std::string(buffer);
}
else if(ret == SQL_SUCCESS_WITH_INFO)
{
std::auto_ptr<char> largeBuffer(new char[sizeNeeded + 1]);
// Doesn't return the whole field, only what was left...
SQLGetData(_statement, _columnIndex, SQL_C_CHAR, (SQLCHAR*)largeBuffer.get(), sizeNeeded, &sizeNeeded);
}
Спасибо за любую помощь!