[OLEDB ] Количество записей в запросе и жуткие тормоза
От: andy_84 Россия  
Дата: 16.10.08 08:47
Оценка:
Доброе время суток. Проблема следующая.

Есть 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 медленнее предыдущего варианта. Что неприемлимо.

Просмотрел много сообщений и на здешнем форуме, и в гугле искал — все спрашивают, как получить кол-во записей, но никто не волновался о скорости последующего прохода.

Знает кто-нибудь, как получить кол-во записей в запросе и не потерять в скорости ?
Заранее благодарю.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.