Есть такая задача: сделать выборку из базы на MS SQL Server 2000 средствами OLE DB. Вроде бы всё сделал как в MSDN рекомендовано, но происходит дублирование последней записи. Мягко выражаясь, торможу — не могу понять в чём дело. Помогите дельным советом, пожалуйста!! Код ниже. SQL запрос оттестил — всё в порядке.
char* DbAccess::GetData(BOOL* RowsEndFlag, wchar_t** wRowsData)
{
hr = pIRowset->GetNextRows(NULL, 0, 1, &cRowsObtaned, &pRow);
if (FALSE(hr))
{
pIRowset->ReleaseRows(cRowsObtaned, rghRows, NULL, NULL, NULL);
delete [] pRowValues;
delete [] pDBBindStatus;
delete [] pDBBindings;
pIAccessor->ReleaseAccessor(hAccessor, NULL);
pIAccessor->Release();
pIColumnsInfo->Release();
pIRowset->Release();
pICommandText->Release();
pIDBCreateSession->Release();
pIDBInitialize->Uninitialize();
pIDBInitialize->Release();
CoUninitialize();
*RowsEndFlag = FALSE;
return "Error GetNextRows";
}
if (cRowsObtaned == 0)
{
*RowsEndFlag = FALSE;
delete [] pRowValues;
return "OK";
}
hr = pIRowset->GetData(rghRows[0], hAccessor, pRowValues);
if (FALSE(hr))
{
pIRowset->ReleaseRows(cRowsObtaned, rghRows, NULL, NULL, NULL);
delete [] pRowValues;
delete [] pDBBindStatus;
delete [] pDBBindings;
pIAccessor->ReleaseAccessor(hAccessor, NULL);
pIAccessor->Release();
pIColumnsInfo->Release();
pIRowset->Release();
pICommandText->Release();
pIDBCreateSession->Release();
pIDBInitialize->Uninitialize();
pIDBInitialize->Release();
CoUninitialize();
return "Error GetData from Rows";
}
for (ULONG nCol = 0; nCol < nCols; nCol++)
*(wRowsData + nCol) = (wchar_t*)&pRowValues[pDBBindings[nCol].obValue];
hr = pIRowset->ReleaseRows(cRowsObtaned, rghRows, NULL, NULL, NULL);
return "OK";
}
Прошу строго не ругать за немного корявый код — это уже в процессе отладки захламилось — позже почищу. Главное сама идея.... И, просто не здесь инициализируется...
HROW rghRows[1];
HROW* pRow;
char* pRowValues;
//.......
pRow = &rghRows[0];
pRowValues = new char[cbRow]
дабы не возникали всякие-разные подозрения....

Хотя я не понимаю почему бы не объявить HROW* rghRows = new HROW[1] и использовать уже &rghRow... Ну... так в MSDN...