Использование ридера из CreateDataReader отличается от зацикливания на Datatable.Rows

1

Я прочитал файл Excel и поместил его в Datatable. Если я поставил myDatatable.Rows.Count() останова и myDatatable.Rows.Count() значение myDatatable.Rows.Count() это будет равно количеству строк в моем файле excel. Но затем я передаю свой объект datatable методу, подобному этому:

private void Foo(Datatable dt)
{
   DataTableReader reader = dt.CreateDataReader();
   while(reader.Read())
   {
        // do stuff on each row 
   }
}

Теперь, если я поставлю счетчик внутри while loop, он показывает, например, 10, а число строк - 100000. Что я делаю неправильно?

  • 0
    «Теперь, если я помещу счетчик в свой цикл while», --- этот счетчик будет показывать разные (увеличенные) значения для каждой итерации.
Теги:
datatable

2 ответа

1
Лучший ответ

Это должно работать подобно циклу for-each в DataTable.Rows Я угадываю, где-то в вашем while loop вы выходите из цикла. Убедитесь, что вы правильно использовали " break " и " continue ".

  • 1
    Магия! Заменить «перерыв» на «продолжить»
0

Что заставляет вас думать что-то неправильно? Таблица будет иметь, например, 100000 строк, которые не будут меняться. DataReader, итерация по таблице по одной строке за раз, будет иметь другую позицию на каждой итерации.

  • 0
    пожалуйста, объясните больше! Разве это не идет ряд за рядом?
  • 0
    DataTableReader разрешает только пересылку, доступ только для чтения к DataTable, начинается с первой строки и переходит к следующей при вызове Read () или NextResult (). Положение DataTableReader не влияет на общую длину таблицы. Думайте об этом как о подъеме по лестнице; лестница (DataTable) всегда будет иметь 12 ступеней, но когда вы поднимаетесь, вы (DataTableReader) соответственно перемещаетесь с 1-го на 12-е.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню