MDAC 2.5 SDK - OLE DB Programmer's Reference
Chapter 4: Rowsets
The OLE DB provider keeps track of the next fetch position so that a sequence of calls to IRowset::GetNextRows (with no skips, changes of direction, or intervening calls to IRowsetFind::FindNextRow, IRowsetIndex::Seek, or IRowset::RestartPosition) reads the entire rowset without skipping or repeating any row. The next fetch position is changed either by calling IRowset::GetNextRows, IRowset::RestartPosition, or IRowsetIndex::Seek, or by calling IRowsetFind::FindNextRow with a NULL pBookmark value. Calling IRowsetIndex::FindNextRow with a non-NULL pBookmark value has no effect on the next fetch position.
If the rowset supports reversible fetch direction and the fetch direction is reversed from the previous call to IRowset::GetNextRows (or IRowsetFind::FindNextRow with a NULL pBookmark value), the next fetch position for GetNextRows or FindNextRow in the new direction is the last row that was fetched in the previous direction. Otherwise, the next fetch position is the row following the last row fetched by GetNextRows (or FindNextRow with a NULL pBookmark value).