|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
Всем привет. Немного вступления. Я занимаюсь созданием отчётов на VBA + MS SQL(через ADODB драйвер). Сейчас на работе постепенно хотим уходить от Vba, заменив его более современным языком. Мой выбор пал на C# - начал постепенно его изучать. В качестве тренировки хочу написать след. решение: Есть след. задача: Есть большой файл в Excel 100К+ строк на 60 столбцов, который представляет из себя информацию по всем грузоперевозкам в различных аспектах. Файл постоянно видоизменяется в плане кол-ва строк(причём строки могут как добавляться,меняться, так и удаляться полностью) Раньше данную информацию хранили в БД в 1 таблице, но сейчас была проведена реструктуризация хранения информации на сервере и база была нормализована , соответственно информация была распределена по 30 бизнес-таблицам. Сейчас данные из Excel загружаются мною в БД 1 раз в месяц путем полной перезаписи всех данных за определенный период. Ненормализованные данные закачиваются сначала в промежуточную таблицу на сервере, а затем с помощью хранимой процедуры идет запись/удаление во всех бизнес-таблицах БД. Итак я хотел бы сделать приложение для работы с данной таблицей и синхронизацией ее с сервером, чтоб пользователи могли сами вести запись/удаления своих данных в реальном времени(это пока предварительная концепция ): - Собираюсь в Desctop - приложении(в дальнейшем может сделаю надстройку для Excel) сделать загрузку из Excel в GridView c возможностью редактирования данных, с последующей загрузкой на сервер, а также возможностью наоборот выгрузить данные с сервера. При всех операциях пользователь должен работать с шаблоном данных как в Excel(то есть 1 большая ненормализованная таблица, возможно добавлю фильтры по периодам, для сокращения строк) Перерыл весь интернет, но так и не понял, как лучше спроектировать данную систему, в связи с чем хотел бы услышать мнение опытных разработчиков: 1) Какую библиотеку для работы с Excel использовать в проекте, чтобы приложение работало на всех машинах (компы все примерно одинаковые, ms office стоит у всех) 2) Как работать с ненормализованными данными: Необходимо ли разбивать на сущности на клиенте, а затем каждую сущность закачивать в свою таблицу, либо же оставить 1 сущность, а потом ее гдето делить ... 3) Как производить редактирование данных на сервере, ведь назад с сервера я должен выводить в GridView консолидированные данные из view с сервера 4) Почитав соответствующие форумы был поражен кол-вом решений по взаимодействию с БД , какой метод лучше выбрать в моём случае: чистый ado.net, или одну из ORM? 5) Есть ли хорошие книги/статьи по решению подобных кейсов как у меня? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2019, 09:16 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
StarDestroyer89Есть ли хорошие книги/статьи по решению подобных кейсов как у меня? Книги по написанию очередной приблуды для импорта данных из Excel? Вряд-ли :) Статьи... Если в гугле набрать "C# import from excel to datagridview", то получите до фига статей, в том числе и откровенный шлак. Начните с презентации своей концепции пользователям, формализуйте требования. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2019, 09:40 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
Я так понял, что импорт из экселя в новой концепции не нужен, нужен интерфейс ВМЕСТО экселя. Но при этом нужен "сырой" нетипизированный ввод. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2019, 10:01 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
Shocker.Pro, Я предполагаю, что пользователь будет управлять своими данными через интерфейс: 1) Импорт - Загрузка из Excel нового куска данных в интерфейс в GridView - Первичная валидация данных, информирование об ошибках, исправление ошибок через GridView - Загрузка на сервер 2)Повседневная работа - Выгрузка данных использую фильтры в GridView, корректировка - Загрузка на сервер. Экспорт 3) Выгрузка обратно в Excel за определенный период Пока сам еще не определился - в процессе разработки будет виднее. Пока хотел бы больше разобраться, как выстроить объектную модель и структуру приложения, какие технологии применить. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2019, 10:14 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
А насколько нужен редактор сырых данных, если изначальные данные все равно в экселе? К возможностям редактирования экселя ты даже близко не подойдешь. Есть такой вариант, я так делал. Пользователь готовит файл в экселе, пытается его загрузить. Если при загрузке выясняется, что файл неверный, то файл раскрашивается загрузчиком, допустим ошибочные ячейки помечаются красным фоном и добавляется комментарий, описывающий проблему. Либо выводится отчет (например в виде html, чтобы не париться), где в дружественной форме указывается пользователю на его ошибки. А при успешной загрузке пользователю предоставляются уже нормальные редакторы сущностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2019, 11:17 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
Shocker.Pro, Спасибо, учту. Допустим, файл прошел проверку. Как мне лучше управлять ненормализированными данными? Делить по сущностям(класссам) на клиенте и организовывать связь каждой сущности с соответсвующей таблицей в бд? Далее, допустим, через orm - удалять, изменять, добавлять строки в БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2019, 16:09 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
StarDestroyer89Shocker.Pro, Спасибо, учту. Допустим, файл прошел проверку. Как мне лучше управлять ненормализированными данными? Делить по сущностям(класссам) на клиенте и организовывать связь каждой сущности с соответсвующей таблицей в бд? Далее, допустим, через orm - удалять, изменять, добавлять строки в БД? А оно вам надо? У вас же уже есть и промежуточная таблица, и хранимая процедура. Цель-то какая? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2019, 16:14 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
StarDestroyer89Допустим, файл прошел проверку. Как мне лучше управлять ненормализированными данными? Делить по сущностям(класссам) на клиенте и организовывать связь каждой сущности с соответсвующей таблицей в бд? Далее, допустим, через orm - удалять, изменять, добавлять строки в БД?Я бы отдал это на сервер приложения. В твоем описании он не просматривается, как я понимаю, ты хочешь сохранить двухзвенку. Если с нуля - наверное логичнее было бы делать на клиенте, но тут я с Дмитрием согласен - раз есть уже отлаженный механизм, почему бы им не воспользоваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2019, 16:28 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
Shocker.Pro, так как этот проект я буду делать в качестве тренировки, я его буду делать во внерабочее время. Поэтому у меня нет цели сделать его быстрее. Есть цель сделать его максимально правильно с точки зрения архитектуры и "пощупать" все соответсвующие технологии. Я так понимаю, что нужно делать трёхзвенку , так как двухзвенка это уже вчерашний век. То есть необходимо остановиться на MVC модели? То есть необходимо делить на клиенте, а потом писать на сервер. Этот подход необходимо применять и при работе с файлом при импорте и при повседневной работе с DataGridView? Как лучше реализовать бизнес-логику - пробегаться циклом по всем строкам Excel файла/DataGridView и формировать сущности в зависимости от столбца или есть более изящный способ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 10:49 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
StarDestroyer89Я так понимаю, что нужно делать трёхзвенку , так как двухзвенка это уже вчерашний век.Ну это практичнее и безопаснее, удобнее в управлении версиями. То есть целишься на тонкого клиента (неважно, десктоп или веб) и серверный бэкенд, ну а БД уже за ним и клиенту никак не доступна StarDestroyer89То есть необходимо остановиться на MVC модели?Если клиент десктопный - на сервере у тебя будет вебапи скорее всего. А на клиенте - как хочешь. Можно, например WPF+MVVM StarDestroyer89То есть необходимо делить на клиенте, а потом писать на сервер.При наличии сервера приложения - на сервере приложения скорее всего, нужно подробнее задачу смотреть StarDestroyer89Этот подход необходимо применять и при работе с файлом при импорте и при повседневной работе с DataGridView?Слишком абстрактный вопрос. Какой подход? Что такое "повседневная работа"? StarDestroyer89к лучше реализовать бизнес-логику - пробегаться циклом по всем строкам Excel файла/DataGridView и формировать сущности в зависимости от столбца или есть более изящный способ?Разделить в голове представление и модель данных. При разделении данных на сущности слово DataGridView у тебя нигде не должно фигурировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 11:45 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
StarDestroyer89проект я буду делать в качестве тренировки, я его буду делать во внерабочее времяВ качестве тренировки в нерабочее время лучше пройти пару онлайн курсов по C#. StarDestroyer89Есть цель сделать его максимально правильно с точки зрения архитектуры и "пощупать" все соответсвующие технологии. Я так понимаю, что нужно делать трёхзвенку , так как двухзвенка это уже вчерашний век. То есть необходимо остановиться на MVC модели? То есть необходимо делить на клиенте, а потом писать на сервер.Архитектура сильно зависит от задачи. Сейчас "данные из Excel загружаются мною в БД 1 раз в месяц". Не вижу тут смысла городить трёхзвенку. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 13:36 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
К примеру вот архитектура нашего импорт сервиса: ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 13:37 |
|
Синхронизация книги Excel и БД
|
|||
---|---|---|---|
#18+
А вот архитектура интерфейса импорта: ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 13:38 |
|
|
start [/forum/topic.php?fid=17&fpage=3&tid=1349103]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 230ms |
total: | 358ms |
0 / 0 |