Как перебрать большой набор результатов SQL с несколькими связанными таблицами - PullRequest
1 голос
/ 01 апреля 2012

Я получаю очень большое количество записей с несколькими наборами результатов из SQL Server в мой проект .NET 3.5.

Я не могу просто вытащить их все в DataSet и поработать с ними, так как это заняло бы слишком много памяти.Мне не нужно извлекать все записи как один раз, а только одну запись в родительской таблице, а затем связанные дочерние записи.

Я мог бы добиться этого с помощью DataReader, но моя проблема здесь в том, что процесс перебора всех записей займет много часов.Это означает, что DataReader будет оставаться открытым в течение всех тех часов, которые я не думаю, что это возможно.

Как вы обрабатываете записи, когда получение всех записей в DataSet не возможно из-за большого числа, но использование DataReader требует, чтобы он был открыт в течение многих часов?

1 Ответ

2 голосов
/ 01 апреля 2012

Один из способов решения этой проблемы - разделить данные и обработать их по частям, сохраняя при этом информацию о последней обработанной записи.

Таким образом, если соединение с базой данных потеряно, вам не нужно начинать сначала, но вы можете продолжить с последней «контрольной точки» (вы можете сохранить контрольную точку после каждой записи, если это имеет смысл).

Если обработка каждой загруженной записи занимает много времени, имеет смысл использовать DataTable для загрузки небольшого куска данных в память, обработки и продолжения (это улучшает использование ресурсов БД). Но если обработка выполняется быстро и большую часть времени тратится на загрузку данных из базы данных, то было бы более целесообразно использовать DataReader (для экономии памяти).

...