powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Большая выборка и DataSet
25 сообщений из 65, страница 1 из 3
Большая выборка и DataSet
    #39624489
Oomel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, товарищи!

Прочитал много гугла, но внятного решения не нашел. Надеюсь вы сможете подсказать.

На сервере SQL имеется табличка. 67 полей с типами Int, Binary(8), varchar(255), Decimal(31,15). Количество строк >5kk.
Прирост данных ~30к в месяц.

У меня стоит задача эту табличку вывести в DataGridView.

Пробовал делать через DataSet и SqlDataReader. При любом из вариантов при сборке x86 приложения выхватываю OutOfMemory.
При сборке x64 приложение выедает гигабайты оперативной памяти.

Все данные при выгрузке приводятся к System.String.

Общий принцип выгрузки такой:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
using System.Data.SqlClient;

/*------------------------------------------------*/

string connString = string.Format("Data Source = {0}; User ID = {1}; Password = {2}", "serverName", "loginName", "password");
SqlConnection curConnection = new SqlConnection(connString);

curConnection.Open();

DataSet data = new DataSet();

SqlDataAdapter dataAdapter_FILES = new SqlDataAdapter("select * from MyFkngBigTable", curConnection);

dataAdapter_FILES.Fill(data, "FILES_DTA"); //OutOfMemoryException ибо записей очень много а памяти очень мало

BindingSource bsAllOfMyData = new BindingSource
{
    DataSource = data,
    DataMember = "FILES_DTA"
};

dataGridView.DataSource = bsAllOfMyData;
curConnection.Close();
curConnection.Dispose();



Не покидает стойкое ощущение, что я что-то делаю неправильно.
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624494
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oomel,

вам точно на клиенте нужно отобразить сразу ВСЕ строки ?
Посмотрите в сторону пейджинга, скуль его давно поддерживает.
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624500
Oomel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно не все.

Суть в том, чтобы показать клиенту все данные из этой таблицы, удовлетворяющие фильтрам.
Фильтры строятся по всем столбцам таблицы.

Таблица представляет собой некий журнал событий, регистрирующей изменения в других таблицах.
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624510
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oomel,
Вы не слышите что вам пишут.
На строке fill
Вся база качается на клиента.
Вам нужна пагинация.
Видели такое?
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624513
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oomel,

Dataset такое не выдержит

Datagridview в виртуальном режиме для начала
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624522
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Тупая пагинация - от бедности

В msacess грид неплохо сделан
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624529
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилТупая пагинация - от бедности
Во всех языках программирования (ЯП) с талами фигово. Увы.

ИзопропилВ msacess грид неплохо сделан
Ссылку? Не видел.
Вообще, в net планформе должен быть))
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624533
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123талами
С таблицами
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624534
Oomel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Я вполне услышал :). Но не сталкивался с таким подходом. У Вас, случаем, не найдется примера?
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624546
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Вся база качается на клиента.
Вам нужна пагинация.Как пагинация поможет при фильтрации на клиенте?
Фильтрация в этому случае должна быть на сервере. Качать готовый отфильтровайнный и сджойненный результат, а не пытаться на клиента всю базу перекачать - не для того СУБД придумывали, чтобы на клиенте все делать.
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624547
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oomel
Код: c#
1.
select *

звездочка - вообще зло!
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624556
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oomel,
У меня табла от телерик.
А запрос на нужную страничку:
Queryable.Skip(номерСтранички....
NuGet....pagedList.
...
Но я коллекционирую и другие варианты как и вы)).
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624558
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProPetro123Вся база качается на клиента.
Вам нужна пагинация.Как пагинация поможет при фильтрации на клиенте?
Фильтрация в этому случае должна быть на сервере. Качать готовый отфильтровайнный и сджойненный результат, а не пытаться на клиента всю базу перекачать - не для того СУБД придумывали, чтобы на клиенте все делать.
Как пагинация мешает фильтрации?
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624562
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Как пагинация мешает фильтрации?Пагинация выполняется ПОСЛЕ фильтрации. Поэтому пагинация сама по себе не сможет уменьшить количество записей, передаваемых с сервера, если выполняется на клиенте. Так что фильтрацию надо выполнить на сервере, а пагинация - это уже второй вопрос
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624568
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Про работу на клиенте вы сами придумали. Я не говорил что работаю на клиенте с большими выборками.
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624571
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПоэтому пагинация сама по себе не сможет уменьшить количество записей, передаваемых с сервера, если выполняется на клиенте.
А кто говорит, что пейджинг на клиенте ???
Я отфильтровал данные на сервере и получил 1М строк.
После этого использую пейджинг на сервере и уменьшаю количество строк передаваемых с сервера.
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624572
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5 вариантов paging, выбирай:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
CREATE PROCEDURE [dbo].[_Paging]
@PageNumber int = 3, 
@PageSize int = 2
as
declare @Table as table (Id int primary key)
insert @Table (Id) values(1) insert @Table (Id) values(2) insert @Table (Id) values(3) insert @Table (Id) values(4) insert @Table (Id) values(5)
declare @Offset int
set @Offset = (@PageNumber - 1) * @PageSize + 1
--1. TOP (N) (нужно считать @ActualPageSize)
select *
	from
	(select top (@PageSize)	* 
		from (select top (@PageSize * @PageNumber) *
				from @Table
				order by Id desc) as T1
		order by Id asc) as T2
	order by Id desc
--2. ROW_NUMBER
select * 
	from
	(select *, row_number() over (order by Id desc) as row_number 
		from @Table) T
	where row_number between @Offset and @Offset + @PageSize - 1;
--3. ROW_NUMBER with CTE
with T as 
(select *, row_number() over (order by Id desc) as row_number
		from @Table)
select * 
	from T
	where row_number between @Offset and @Offset + @PageSize - 1;
--4. ROW_NUMBER with CTE and JOIN
with T as 
(select Id, row_number() over (order by Id desc) as row_number
		from @Table)
select T1.* 
	from T join @Table T1 on T.Id = T1.Id
	where row_number between @Offset and @Offset + @PageSize - 1;
--5. SET ROWCOUNT
declare @OffsetId int
set rowcount @Offset
select @OffsetId = Id 
	from @Table
	order by Id desc
set rowcount @PageSize
select *
	from @Table
	where Id <= @OffsetId
	order by Id desc
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624573
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

При асинхронной загрузке можно и не ждать окончания фильтрации
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624575
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Код: c#
1.
Queryable.where(фильтр...).Skip(пагинация.....
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624576
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

Я бы еще версию скуля указал , для которой прокат пейджинг
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624577
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,
Хранимка - привязка к одной субд. Малеееенькая ложка дёгтя.))
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624581
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это просто пример, обёрнутый в ХП для удобства
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624585
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneэто просто пример, обёрнутый в ХП для удобстваОК.
А панель пейджинга в ГУИ?
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624589
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какая панель? у меня вообще сейчас ангуляр
...
Рейтинг: 0 / 0
Большая выборка и DataSet
    #39624590
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-dukeА кто говорит, что пейджинг на клиенте ???
Я отфильтровал данные на сервере и получил 1М строк.
После этого использую пейджинг на сервере и уменьшаю количество строк передаваемых с сервера.А кто говорит, что фильтрация на сервере?
У ТС проблема именно с тем, что он неотфильтрованные данные не может получить в DataSet, ибо их много.
Oomel
Код: c#
1.
2.
3.
SqlDataAdapter dataAdapter_FILES = new SqlDataAdapter("select * from MyFkngBigTable", curConnection);

dataAdapter_FILES.Fill(data, "FILES_DTA"); //OutOfMemoryException ибо записей очень много а памяти очень мало
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Большая выборка и DataSet
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]