Клонируйте SQLDataReader, чтобы получить количество строк

У меня есть устройство чтения данных. Мне нужно найти в нем количество строк, чтобы я мог создать массив. Первоначально я делал это с помощью:

<code>
DataTable dt = new DataTable();
dt.Load(reader);
int noOfRows = dt.Rows.Count; 
</code>

Однако я обнаружил, что загрузка ридера в таблицу данных закроет ридер, прежде чем я смогу повторить его позже в своем коде. Я думал о клонировании ридера и передаче клона в Datatable. Возможно ли это или желательно?

Есть ли лучший способ узнать количество строк в моем считывателе данных? Я знаю, что могу что-то сделать со списком (не совсем уверен, что именно), но мой носитель данных содержит 33 поля с различными типами данных, и я не знаю, как все это поместить в список.

Благодарность


person Gavin    schedule 09.06.2016    source источник
comment
Нет, это всего лишь разовый запрос. Проект действительно небольшой. Запрос представляет собой базовую таблицу SELECT xxx FROM WHERE. Могу ли я использовать для этого SET NOCOUNT ON? SQL на самом деле не мое.   -  person Gavin    schedule 09.06.2016
comment
Теперь вы можете просто использовать свой DataTable, когда он заполнен.   -  person Crowcoder    schedule 09.06.2016
comment
После того, как вы загрузили DataTable с помощью программы чтения, она вам больше не нужна. Просто используйте DataTable Rows, все данные есть.   -  person Steve    schedule 09.06.2016
comment
Если я использую следующее для запуска моего устройства чтения данных, как мне изменить его на datatable? ‹Code› while (reader.Read () && (i! = NoOfRows)) ‹/code› Другими словами, как мне зациклить данные?   -  person Gavin    schedule 09.06.2016
comment
Я сделаю это как цикл foreach   -  person Gavin    schedule 09.06.2016
comment
Вы можете просмотреть таблицу, используя foreach(DataRow drow in DataTable.Rows) {}   -  person Hari Prasad    schedule 09.06.2016
comment
Я использовал DataTable и просмотрел его. Вроде все хорошо. Спасибо, парни.   -  person Gavin    schedule 09.06.2016


Ответы (1)


Ни ADO.NET, ни сам SQL Server не знают количество строк до их отправки. Вы можете узнать, только перечислив все строки.

Может быть, вы можете просто использовать List вместо массива, чтобы вам не нужно было заранее определять размер?

person usr    schedule 09.06.2016