IRowPosition Code Example
The following code fragment shows how a consumer might use IRowPosition when traversing a rowset:
IRowPosition *pRowPosition = NULL;
HRESULT hr;
hr = CoCreateInstance(CLSID_OLEDB_ROWPOSITIONLIBRARY, NULL,
CLSCTX_INPROC_SERVER, IID_IRowPosition,
(LPVOID *)&pRowPosition);
if (FAILED(hr))
return hr;
hr = pRowPosition->Initialize(pRowset); // Initialize with pRowset
if (FAILED(hr))
{
pRowPosition->Release();
return hr;
}
// Read the rows--100 rows at a time into the rowset.
while (SUCCEEDED(hr = pRowset->GetNextRows(NULL, 0, 100, &cRowsObtained, &rghRows))
&& cRowsObtained)
{
for (irow = 0; irow < cRowsObtained; irow++)
{
// GetData copies the rows into the local buffers, performing the
// type conversions specified in the binding structures associated
// with the accessor.
pRowset->GetData(rghRows[irow], hAccessor, (void*) rgData);
// Set currently read row as "current row."
// Note: Other clients will choose different notions
// of current row.
if (pRowPosition->ClearRowPosition () == S_OK)
pRowPosition->SetRowPosition (NULL, rghRows[irow],
DBPOSITION_OK);
// Convenience function to print the data
PrintData(rgData);
}
// Release the rows just printed from the rowset.
pRowset->ReleaseRows(cRowsObtained, rghRows, NULL, NULL, NULL);
}