Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > количество элементов в OleDbDataReader


Автор: BraM's 3.11.2004, 14:06
Код

oleDbCommand1.CommandText = "select MAP_SIZE from MAP";
OleDbDataReader reader = oleDbCommand1.ExecuteReader();


Как узнать, сколько записей в reader? RowsAffected = 0 что вообщем-то интуитивно понятно... :qstn

Автор: Tomcat 3.11.2004, 14:29
Читай MSDN :rtfm :
Цитата
Provides a way of reading a forward-only stream of data rows from a data source

Он только читает по порядку результат запроса. И заканчивает выполнение по окончанию записей. Короче, он сам не знает, сколько он прочитает.
А про RowAffected в MSDN:
Цитата
Gets the number of rows changed, inserted, or deleted by execution of the SQL statement

Заметь про SELECT (выборки) здесь ничего не сказано! :rtfm

Автор: BraM's 4.11.2004, 18:08
Хорошо. Как тогда узнать количество зваписей в данном селекте?

Автор: Tomcat 5.11.2004, 10:11
Вот это другой вопрос... smile
Я, однажды столкнувшись с такой бедой, так и не нашел выхода. Это касается только использования DataReader-a. Количество записей узнавал только после полного прочтения результатов запроса. Но у меня была необходимость использовать именной DataReader.

Все зависит от того, что тебе именно нужно.
Если тебе нужны и записи, и их количество, используй OleDbDataAdapter + DataSet или OleDbDataAdapter + DataTable. Потеряешь немного в производительности и в использовании ресурсов памяти (тут все зависит от предполагаемого количества возвращаемых записей). Вот пример:
Код

OleDbDataAdapter adapter = new OleDblDataAdapter("select MAP_SIZE from MAP", connection);
DataTable result = new DataTable();
adapter.Fill(result);

Теперь в result.Rows будут вернувшиеся записи. Ну и соответственно в result.Rows.Count их количество.

Если же тебе нужно только количество записей:
Код

oleDbCommand1.CommandText = "select Count(MAP_SIZE) from MAP";
int count = oleDbCommand1.ExecuteScalar();

В count будет твое количество.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)