54 / 48 / 31
Регистрация: 14.04.2015
Сообщений: 273
|
|||||||||||||||||||||
SQL Server и клиентское приложение21.08.2017, 07:07. Показов 5051. Ответов 16
Метки нет Все метки)
(
Всем доброго времени суток.
Друзья подскажите пожалуйста как правильно сделать. Есть обширная база данных на SQL Server 2014 с кучей таблиц, и кучей записей в каждой таблице...предположим по 500 000 тыс. записей. (Базу данных предоставили готовой !) Написал на коленке приложение которое не посредственно будет работать с этой базой данных (label, textbox, combobox, datagridview, кнопка сохранить удалить подключить изменить(полный комплект =) )). и тут встал вопрос как правильно организовать работу с БД. 1. Как вариант в коде программы писать запросы на выборку нужных мне таблиц (Получаеться в коде слишком много текста на запросы, не красиво, по мне так не профессионально кажеться) =) 2. На Сервере создать представление которое будет отображать все нужные данные (вариант хороший, использую на данный момент) минус в том что не могу разобраться с сохранением и удалением данных. при вставке строчки Кликните здесь для просмотра всего текста
Использую такую структуру на данном этапе. Кликните здесь для просмотра всего текста
Вот с этим кодом программы все работает (Подключение добавление удаление изменение сохранение) само сохранение реализую таким образом
Но проблема состоит в том что когда я загружаю данные в DataSet строчка
Уже всю голову себе поломал этой головоломкой. Подскажите как можно ускорить заполнение dataset или подскажите как правильно сделать. Может я не правильно делаю логику программы для работы с данными ?! Суть в том что есть большая таблица на 500 000 тыс. записей и пользователю надо работать со всеми данными(грубо говоря это Номенклатура, реестр заявок и т.д.). Как отобразить быстро такую таблицу. На код не обращайте внимания, знаю что FB а надо было SQL =) нет под рукой настоящего исходника, логика точно такая же ! Помогите пожалуйста нуждаюсь в совете, всем огромное спасибо !!!
0
|
21.08.2017, 07:07 | |
Ответы с готовыми решениями:
16
Клиентское приложение (оболочка) на C# для БД (MS SQL Server) Приложение на C# и SQL Server Приложение неправильно передает значение от sql server |
![]() ![]() |
||
21.08.2017, 07:19 | ||
Отсюда вывод - запрашивать и отображать данные постепенно, по мере их, например, прокрутки в отображении. Улавливаете суть?
1
|
54 / 48 / 31
Регистрация: 14.04.2015
Сообщений: 273
|
|
21.08.2017, 07:57 [ТС] | |
Хм...суть уловил что надо сделать типо постраничного просмотра данных.
Но до конца не могу в голове собрать исходники ![]() к примеру, когда мы заходим на форму мы сперва загружаем 500 строк, а когда прокрутили вниз загрузили еще 500 строк. И так далее пока не дойдем до самого низа. Но тут вопрос возник в том что если мне сразу нужно последние значение таблицы ? к примеру делаю фильтр. То как это будет выглядить ?! вот чего не могу собрать в голове.
0
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
||
21.08.2017, 09:02 | ||
Представьте себе ситуацию у гугла - там лярды записей. И как бы работал браузер, если бы гугл выдавал все эти записи одним заходом? Вся суть в деталях - у Вашего шефа маниакальное желание объять необъятное - это нереально, почитайте умные книжки, разсудите сами - человек не в силах уловить в голове даже 1000 записей, а Вы хотите 500000 - это просто ппц. При этом даже если Вы загрузите 500 записей, а дальше в фоне будете загружать еще 499 000 - то при обновлении грида программа всё равно зависнет. Ну т.е. заполнение таблицы незаметно, а вот при датасорсе - "ляжет". Да и смысл то какой держать в оперативке столько записей, да еще и работать с гридом?
1
|
54 / 48 / 31
Регистрация: 14.04.2015
Сообщений: 273
|
||
21.08.2017, 09:39 [ТС] | ||
Так все ближе и ближе истина ! =) спасибо господа за ответы но тема актуально.
Я же говорю есть грубо говоря таблица Номенклатура которая собрана из 3 таблиц, в общем составило 500 000 записей (это для примера что бы понять что к чему). Сперва при открытии формы пользователю нужно показать что все данные есть на форме (Ребята будем ориентироваться на тех задание, мне тоже это не нужно по 3 миллиона записи им выводить и держать это все в памяти, у них компы сгорят). Давайте ориентироваться на 1с 2 - х летнию базу. Как там реализовано ? заходим в справочник авансов к примеру, а он нам раз и 1000 где то вывел, пролистал на самый вверх спустя от 2 - 5 секунд он мне показал остаток таблицы. Так главное что это еще и быстро прошло. Кажеться в реестре счетов там та же история, тоже большая таблица и все быстро загружаеться и подгружаеться. Так вот к примеру как мне реализовать что то подобное. С гуглом я согласен он не грузит все данные, так вот этот момент я не могу понять как делаеться и что бы скорость заполнения была, так еще и все грубо говоря данные вывел, и с ними можно было работать. Делать фильтр до загрузки данных ![]() То есть делаю запрос на выборку данных, делаю фильтр а уже потом вывожу ? Но как тогда посмотреть остаток данных и как пользователь будет работать с поиском и своим фильтром ?! Да пользователь не сможет работать со всеми но как минимум с двумя десятками точно будет. Суть в том чтобы есть 2 большие таблицы и combobox при выборе в combobox фильтруеться одна таблица. У этой таблице есть ID по которому фильтруеться вторая таблица. На просторах сайт задавал вопрос как сделать, разобрался спасибо за ответы и подсказки. Или вы имеете в виду сделать пустые таблицы при открытии формы, а пользователь пусть начинает лепить себе запрос ? типо в combobox мне нужны такие то данные, и нажал на кнопку ему и показалось. Или как ?! Добавлено через 5 минут Запечатался и не поняно рассказал =) Пользователь открывает форму а она пустая, выбирает к примеру в комбобокс ("сухофрукты") и нажимает кнопку что бы ему отобразилось только в большой таблице сухофрукты и так каждый раз делать ? (как понимаю фильтрация до заполнения) А при выборе в большой таблице Ягоды опять нажимает на кнопку и уже в соседней таблице выводит поставщиков этих Ягод! Получаеться что так ? Но это не актуально и очень не удобно.
0
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
|
21.08.2017, 12:45 | |
Ну раз уж посло воспоминание 1с-ки - то тогда вспоминаем процесс запуска.
Что видим? - а видим бегущие строчки подгрузки справочников. И когда выводились список счетов, то после 200-300 тыс - он тоже начинал висеть, даже в 7-ой версии, а восьмая и подавно. Тогда делайте при запуске задержку на подгрузку таблиц в биндинг, а после запуска обновляйте биндингом свой грид, ну пусть повисит (в принципе - вообще программа зависнет на некоторое время) - и покажется весь набор. Если бизнесу нужно именно такое решение - ну пусть тогда так. У нас бизнес согласился, что при выборе реестра документов (счетов, договоров) - сначала нужно отфильтровать по каким-то признакам (дата, сап-номер, какие-то внутренние показатели), чтобы не вылезал грид на сотни тысяч строк, а вылезли на тысячи строк. Каждому своё, как говориться )
1
|
![]() 644 / 528 / 324
Регистрация: 20.05.2015
Сообщений: 1,469
|
|||
22.08.2017, 05:02 | |||
При этом это может быть не обязательно combobox, а textBox например. Для ввода новой записи например отображать таблицу вообще не нужно, нужно лишь отобразить форму для заполнения. Как вариант можно разбить таблицу на две скажем за текущий год и архив(если он используется редко)
0
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
|||
22.08.2017, 10:17 | |||
![]() Решение
А я даже скажу почему так произошло. Есть 3 момента у ТС
1. 2. 3. Обновление с гридов - опять же можно говнокодом работать, кидая между клиентом и сервером все записи, а можно красиво отправлять только измененные записи (а таких у клиента будет только несколько), и процесс обновления БД станет в разы быстрее и "красивее". Таких моментов можно описать довольно много, но суть - с базами данных нужно работать не так как с текстом.
0
|
22.08.2017, 11:27 | ||
Не по теме:
У нас был случай, когда человек вообще не владел сиквелом, но пробовал что-то писать, проработал недолго, но мучительно было исправлять за ним, ну т.е. вот в точности как и сказал - делал отдельные процедуры для каждой таблицы на каждый функционал - т.е. запускал в теле хранимки 3 хранимки подряд - на update, insert, delete с передачей 2-6 Мб текста как параметры между ними. В общем когда начали смотреть почему тормозят простые на первый взгляд формочки - то ужаснулись даже стажеры :D
1
|
54 / 48 / 31
Регистрация: 14.04.2015
Сообщений: 273
|
|||||||||||
23.08.2017, 09:13 [ТС] | |||||||||||
Еще раз всем спасибо за активность в данной теме.
Проверил на создание хранимой процедуры и вызова её в программе. (Проверил только на FB, через часа 4 проверю на SQL) Честно скажу проверил так, запихал в
Дальше на сервере FB создал процедуру которая не принимает параметров, а только возвращает 3 поля. Подключаю её в проекте точно такой же стройчкой
Верьте нет но он секунд 30 думал, а только потом за 1.5 - 2 секунды вывел результат. То есть как я понял он 30 секунд выполнял процедуру, если зайти через IBExpert и выполнить эту же процедуру то она выполниться за минуту полторы, через программу секунд 30 но это было 5000 записей. Процедура просто 3 выходных параметра и выборка с таблицы. Может я что то не так делаю ?!
0
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
||||||
23.08.2017, 10:20 | ||||||
И мне бы очень хотелось посмотреть.
И понять - зачем в процедуре селекта делать выходные параметры, если она спокойно сама будет отдавать всё, без параметров. Мало того, на селекты еще и отключай подсчет строк (ну это уже само собой). Чуствуется мне, что текст процедуры ооооочень кривой, если она 30 сек "думает". Для примера:
0
|
54 / 48 / 31
Регистрация: 14.04.2015
Сообщений: 273
|
||||||
23.08.2017, 11:03 [ТС] | ||||||
Сейчас уже буду пробывать делать на SQL Servere тестировал на FireBird Не обесуйте за процедуру =) впервый раз писал скрипт на создание.... На другие варианты птица ругаеться на меня...буду сейчас пробывать на Server 2014
0
|
![]() 1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,897
|
|
23.08.2017, 12:24 | |
1
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
||
23.08.2017, 12:57 | ||
![]() У меня параметр имеет тип и в предикате используется именно он (параметр), а не динамически созданная переменная ![]() Да и сама выборка настолько простая, что план построится почти мгновенно. Я не к тому вел разговор, что процедуры всегда работают быстрее, а к тому, что использование процедур упрощает код в разы в сравнении с созданием десятка представлений.
1
|
23.08.2017, 12:57 | |
Помогаю со студенческими работами здесь
17
Многопользовательское приложение для работы с БД SQL Server клиентское приложение афиши Клиентское приложение + удалённый сервер БД Ищу готовое приложение на C# с базой данных на Access или SQL Server Почему не следует возвращать DataSet на клиентское приложение? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Тестирование Pull Request в Kubernetes с vCluster
Mr. Docker 19.07.2025
Часто сталкиваюсь с серьезной дилемой при настройке тестовых окружений для проверки Pull Request в Kubernetes. С одной стороны, каждый PR требует изолированной среды — только так можно гарантировать,. . .
|
Мой 7 минутный ролик с крамольным предложением про шахматы, предлагаю заценить
_Ivana 18.07.2025
p2UhJNMGY94
|
Десять Middleware Node.js для эффективного кодинга
Reangularity 18.07.2025
Когда я только начинал работать с Node. js, количество пакетов в npm меня буквально парализовало. Сегодня их больше 1,3 миллиона — попробуй разберись, что стоит твоего внимания, а что нет. Я потратил. . .
|
Context и глубины Android
mobDevWorks 18.07.2025
В Android разработки Context напоминает воздух - он везде, жизненно необходим, но мало кто может детально объяснить его природу. Мы привыкли получать его как параметр, передавать дальше и. . .
|
Результаты исследования от команды MCM (июль 2025 г.)
Programma_Boinc 18.07.2025
Результаты исследования от команды MCM (июль 2025 г. )
Как сообщалось в наших предыдущих публикациях, мы изучаем гены, которые имеют наибольший рейтинг и ассоциируются с различными видами рака, в. . .
|
ИИ-чатбот на React с OpenAI и LangChain.js
Reangularity 17.07.2025
React давно стал для меня золотым стандартом фронтенд-разработки. Его компонентная структура, виртуальный DOM и однонаправленный поток данных идеально подходят для создания динамичных интерфейсов. . .
|
Пишем адаптер для локального хранилища S3 на C#
stackOverflow 16.07.2025
Разработка современных приложений часто требует интеграции с объектными хранилищами, и Amazon S3 стал де-факто стандартом в этой области. Однако работа с облачными сервисами в процессе разработки. . .
|
Старые замки
kumehtar 16.07.2025
Смотрел тут фото, попались пара старых замков. И сразу бросилось в глаза из отличие. Например:
Замок Бистон, в англии. Разрушенное сооружение. Но - не испорченное людьми, по крайней мере - на. . .
|
Java и Eclipse Store: Сверхбыстрые приложения с In-Memory DB
Javaican 15.07.2025
Eclipse Store — это микро-движок персистентности для Java, который позволяет хранить и извлекать нативные Java-объекты без необходимости преобразования данных или использования объектно-реляционного. . .
|
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
|