Задать вопрос
@Lepeshka

Как обработать выборку из базы построчно?

Есть база SQLite. Есть класс, который работает с базой, который я пишу на C#. Необходимо, чтобы я вызывал метод этого класса, он бы из базы делал выборку и над каждым результатом (строкой из выборки) производил действия в программе.
Если считать сразу все строки и вернуть их в программу, то ведь они же загрузят всю мою оперативку.
Передавать параметром, чтобы вытаскивать не всё сразу, а по 100 строк допустим, кажется каким-то горожением огорода и усложнением.
Передавать ссылку на метод в класс (чтобы считывать строку и вызывать переданный метод для её обработки) кажется не очень верным. Как лучше поступить в такой ситуации?
  • Вопрос задан
  • 137 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Sumor
Хоть так
using(var reader = sqliteCommand.ExecuteReader())
{
  while(reader.Read())
  {
    // вызов вашего метода для конкретной строчки
  }
}

Хоть так
using(var reader = sqliteCommand.ExecuteReader())
{
  // вызов вашего метода для reader, где вы будете сами перебирать строчки  
}


А если хотите поиграться с делегатами (если у вас, например, несколько вариантов обработки методами всей базы)
Тогда передаёте хоть банальный Action (в том числе и в виде лямбда выражения) в функцию считывания и...

void Do()
{
  DoSmthWithDB((Action<DataReader>)((reader) => {Console.WriteLine(reader[0].ToString());}));
}

void DoSmthWithDB(Action<DataReader> myAction)
{
...
// Создание команды к БД
...
using(var reader = sqliteCommand.ExecuteReader())
{
  while(reader.Read())
  {
    myAction(reader); // Action<DataReader> переданный в виде параметра
  }
}
}
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Обычно для такого применяют каллбэки, если не ошибаюсь, то в терминах C# это делегаты (delegate)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы