Member 12324523 Ответов: 3

Как получить миллионы записей в datatable с помощью C#


In my application i have two datatables and two stored procedures while retrieving the data from stored procedure to datatable i am getting below error An exception of type 'System.OutOfMemoryException' occurred in System.Data.dll but was not handled in user code


Что я уже пробовал:

я могу выполнить свой запрос и хранимую процедуру в базе данных, но при извлечении из базы данных в код c# я получаю вышеописанную ошибку

3 Ответов

Рейтинг:
2

Graeme_Grant

Класс OutOfMemoryException (System)[^]:

Цитата:
Исключение, которое возникает, когда недостаточно памяти для продолжения выполнения программы.

Вы пытаетесь загрузить слишком много информации в память. Вам нужно переосмыслить то, что вы делаете и как вы это делаете.

Более подробная информация здесь: Устранение Неполадок Исключения: Система.OutOfMemoryException[^]


Рейтинг:
2

Mohideenmeera

Попробуйте использовать разбиение на страницы и отображать информацию по частям
пожалуйста, найдите пользовательскую концепцию разбиения на страницы

DataRow[] temp = dtversion.Выберите("функция rownumber &ГТ;=" + первый + "и rownumber &ЛТ;=" + последний);
localdatatable = темп.CopyToDataTable();
dataGridView1.Строк.Четкий();
если (localdatatable.Строк.Count = = 0)
вернуть;
по каждому элементу (объекта datarow Row в localdatatable.Строки)
{
dataGridView1.Строк.Добавить(строка[1].ToString (), row["SaveComments"].ToString (), row["DeveloperName"].ToString (), row["SaveDate"].ToString (), row["open"].ToString (), row["RowNumber"].Метод toString());
}
lbltotrecrds.Текст = dtversion.Строк.Граф + " записи найдены. Отображения "+ первый + " К "+ последний + " записей";


Dave Kreskowiak

Да, этот код не имеет ничего общего с получением строк из базы данных.

Рейтинг:
1

OriginalGriff

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

Возможно, Вам также придется посмотреть, что вы с ним делаете: если вы обрабатываете данные в своем коде, то вытягиваете их по частям: возможно, по 1000 строк за раз, или переходите на DataReader и обрабатываете их строка за строкой.
Или если вы показываете их все пользователю, то удалите весь свой исходный код и идите работать в индустрию быстрого питания: вы пишете ужасный пользовательский интерфейс, который ваши пользователи будут страстно ненавидеть. Никогда не показывайте больше двадцати или около того строк: листайте их, ищите, фильтруйте, но никогда не выбрасывайте и не надейтесь на лучшее.