Доброе время суток. Проблема следующая.
Есть MSSQL сервер, с которым работаю через OLEDB. Есть на сервере таблица с миллионом записей.
Запрос к таблице делаю следующим образом:
CCommand<CAccessor<CMyAccessor> > command;
HRESULT hr = command.Open(Session, Select);
При этом вызов Open() для Select = "SELECT * FROM Table_name" занимает меньше секунды, а проход по записям при помощи MoveNext() — секунд 40. Это устраивает.
Теперь встала задача получить количество записей в запросе. У Open'а среди параметров есть DBROWCOUNT* pRowsAffected,
куда это количество записывается. Однако простой вызов
HRESULT hr = command.Open(Session, Select, 0, &RowsAffected);
Пишет в RowsAffected -1, означающий, что "The number of affected rows is not available" (с) MSDN. Хорошо, пробуем сделать например так
CDBPropSet ps(DBPROPSET_ROWSET);
ps.AddProperty(DBPROP_CANHOLDROWS, true);
HRESULT hr = command.Open(Session, Select, &ps, &RowsAffected);
При этом в RowsAffected успешно записывается кол-во записей, но этот вызов Open() выполняется 12 сек, а сам проход по записям работает раз в 15 медленнее предыдущего варианта. Что неприемлимо.
Просмотрел много сообщений и на здешнем форуме, и в гугле искал — все спрашивают, как получить кол-во записей, но никто не волновался о скорости последующего прохода.
Знает кто-нибудь, как получить кол-во записей в запросе и не потерять в скорости ?
Заранее благодарю.