Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Синхронизация книги Excel и БД  [new]
StarDestroyer89
Member

Откуда:
Сообщений: 11
Всем привет.

Немного вступления.
Я занимаюсь созданием отчётов на 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 сен 19, 09:16    [21972138]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2549
StarDestroyer89
Есть ли хорошие книги/статьи по решению подобных кейсов как у меня?

Книги по написанию очередной приблуды для импорта данных из Excel? Вряд-ли :)
Статьи... Если в гугле набрать "C# import from excel to datagridview", то получите до фига статей, в том числе и откровенный шлак.

Начните с презентации своей концепции пользователям, формализуйте требования.
17 сен 19, 09:40    [21972152]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20835
Я так понял, что импорт из экселя в новой концепции не нужен, нужен интерфейс ВМЕСТО экселя. Но при этом нужен "сырой" нетипизированный ввод.
17 сен 19, 10:01    [21972177]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
StarDestroyer89
Member

Откуда:
Сообщений: 11
Shocker.Pro,

Я предполагаю, что пользователь будет управлять своими данными через интерфейс:

1) Импорт
- Загрузка из Excel нового куска данных в интерфейс в GridView
- Первичная валидация данных, информирование об ошибках, исправление ошибок через GridView
- Загрузка на сервер

2)Повседневная работа
- Выгрузка данных использую фильтры в GridView, корректировка
- Загрузка на сервер.

Экспорт
3) Выгрузка обратно в Excel за определенный период


Пока сам еще не определился - в процессе разработки будет виднее. Пока хотел бы больше разобраться, как выстроить объектную модель и структуру приложения, какие технологии применить.
17 сен 19, 10:14    [21972198]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20835
А насколько нужен редактор сырых данных, если изначальные данные все равно в экселе? К возможностям редактирования экселя ты даже близко не подойдешь.

Есть такой вариант, я так делал. Пользователь готовит файл в экселе, пытается его загрузить.
Если при загрузке выясняется, что файл неверный, то файл раскрашивается загрузчиком, допустим ошибочные ячейки помечаются красным фоном и добавляется комментарий, описывающий проблему. Либо выводится отчет (например в виде html, чтобы не париться), где в дружественной форме указывается пользователю на его ошибки. А при успешной загрузке пользователю предоставляются уже нормальные редакторы сущностей.
17 сен 19, 11:17    [21972290]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
StarDestroyer89
Member

Откуда:
Сообщений: 11
Shocker.Pro, Спасибо, учту.

Допустим, файл прошел проверку. Как мне лучше управлять ненормализированными данными? Делить по сущностям(класссам) на клиенте и организовывать связь каждой сущности с соответсвующей таблицей в бд? Далее, допустим, через orm - удалять, изменять, добавлять строки в БД?
17 сен 19, 16:09    [21972666]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26814
StarDestroyer89
Shocker.Pro, Спасибо, учту.

Допустим, файл прошел проверку. Как мне лучше управлять ненормализированными данными? Делить по сущностям(класссам) на клиенте и организовывать связь каждой сущности с соответсвующей таблицей в бд? Далее, допустим, через orm - удалять, изменять, добавлять строки в БД?

А оно вам надо? У вас же уже есть и промежуточная таблица, и хранимая процедура.

Цель-то какая?
17 сен 19, 16:14    [21972671]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20835
StarDestroyer89
Допустим, файл прошел проверку. Как мне лучше управлять ненормализированными данными? Делить по сущностям(класссам) на клиенте и организовывать связь каждой сущности с соответсвующей таблицей в бд? Далее, допустим, через orm - удалять, изменять, добавлять строки в БД?
Я бы отдал это на сервер приложения. В твоем описании он не просматривается, как я понимаю, ты хочешь сохранить двухзвенку. Если с нуля - наверное логичнее было бы делать на клиенте, но тут я с Дмитрием согласен - раз есть уже отлаженный механизм, почему бы им не воспользоваться.

Сообщение было отредактировано: 17 сен 19, 16:29
17 сен 19, 16:28    [21972683]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
StarDestroyer89
Member

Откуда:
Сообщений: 11
Shocker.Pro, так как этот проект я буду делать в качестве тренировки, я его буду делать во внерабочее время. Поэтому у меня нет цели сделать его быстрее.

Есть цель сделать его максимально правильно с точки зрения архитектуры и "пощупать" все соответсвующие технологии.

Я так понимаю, что нужно делать трёхзвенку , так как двухзвенка это уже вчерашний век.

То есть необходимо остановиться на MVC модели?

То есть необходимо делить на клиенте, а потом писать на сервер.

Этот подход необходимо применять и при работе с файлом при импорте и при повседневной работе с DataGridView?

Как лучше реализовать бизнес-логику - пробегаться циклом по всем строкам Excel файла/DataGridView и формировать сущности в зависимости от столбца или есть более изящный способ?
19 сен 19, 10:49    [21973962]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20835
StarDestroyer89
Я так понимаю, что нужно делать трёхзвенку , так как двухзвенка это уже вчерашний век.
Ну это практичнее и безопаснее, удобнее в управлении версиями. То есть целишься на тонкого клиента (неважно, десктоп или веб) и серверный бэкенд, ну а БД уже за ним и клиенту никак не доступна

StarDestroyer89
То есть необходимо остановиться на MVC модели?
Если клиент десктопный - на сервере у тебя будет вебапи скорее всего. А на клиенте - как хочешь. Можно, например WPF+MVVM

StarDestroyer89
То есть необходимо делить на клиенте, а потом писать на сервер.
При наличии сервера приложения - на сервере приложения скорее всего, нужно подробнее задачу смотреть

StarDestroyer89
Этот подход необходимо применять и при работе с файлом при импорте и при повседневной работе с DataGridView?
Слишком абстрактный вопрос. Какой подход? Что такое "повседневная работа"?

StarDestroyer89
к лучше реализовать бизнес-логику - пробегаться циклом по всем строкам Excel файла/DataGridView и формировать сущности в зависимости от столбца или есть более изящный способ?
Разделить в голове представление и модель данных. При разделении данных на сущности слово DataGridView у тебя нигде не должно фигурировать.
19 сен 19, 11:45    [21974038]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26814
StarDestroyer89
проект я буду делать в качестве тренировки, я его буду делать во внерабочее время
В качестве тренировки в нерабочее время лучше пройти пару онлайн курсов по C#.

StarDestroyer89
Есть цель сделать его максимально правильно с точки зрения архитектуры и "пощупать" все соответсвующие технологии.

Я так понимаю, что нужно делать трёхзвенку , так как двухзвенка это уже вчерашний век.

То есть необходимо остановиться на MVC модели?

То есть необходимо делить на клиенте, а потом писать на сервер.
Архитектура сильно зависит от задачи.

Сейчас "данные из Excel загружаются мною в БД 1 раз в месяц". Не вижу тут смысла городить трёхзвенку.
19 сен 19, 13:36    [21974209]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26814
К примеру вот архитектура нашего импорт сервиса:

К сообщению приложен файл. Размер - 28Kb
19 сен 19, 13:37    [21974213]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26814
А вот архитектура интерфейса импорта:

К сообщению приложен файл. Размер - 36Kb
19 сен 19, 13:38    [21974218]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация книги Excel и БД  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26814
Для нашего импорта она очень даже правильная, но вот для вашей задачи не подходит :)
19 сен 19, 13:39    [21974222]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить