#c_sharp #sql #net #office #ms_access
Писал программу, которой на вход подаётся бд access и выполняются различные преобразования ,и столкнулся с тем, что если поменяется что то во входной структуре бд, то придётся жестко рефакторить код... Дело в том, что я работаю через интероп, в некоторых местах делаю запросы на обновления, которые закодированы в коде, в другом месте, где требуется мощь высокоуровневых языков я открываю recordset и произвожу обновления записей. Можно грузить все в память и работать через datatable, но я побоялся больших баз и отказался от этой затеи... Подскажите, лучше всего уйти от того, что есть к коду, который легко редактировать если структура поменяется, сохраняя высокую скорость обработки.
Ответы
Ответ 1
Создать в БД таблицу с конфигом базы. И сходя из этого формировать SQL-запросы. Например, создаём таблицу info описанием таблиц. CREATE TABLE info ( ID int identity (1, 1) primary key ,NameTable varchar(50) ,NameColumn varchar(50) ) При запуске приложения читаем эту таблицу, и формируем запросы для других таблиц. Например загружаем таблицу в DataTable c именем infoTable: string command = "SELECT [ID] "; foreach (DataRow row in infoTable.Rows) { command = command + ",[" + row[2].ToString() + "]"; } command = command + " FROM [" + row[1].ToString() + "]"; В итоге в command получается запрос типа: SELECT [ID], [NameColumn1], [NameColumn2] FROM [NameTable] И так далее... Меняется таблица в БД, меняем описание, запросы формируются иначе.Ответ 2
Еще как вариант изменить программу таким образом чтобы она только выполняла внешние скрипты (в виде файликов 001_update_table1.sql), которые вы будите при необходимости редактировать. В таком случае: Вам не будет необходимости все время пересобирать и переписывать реализацию программы. Можно реализовать поддержку различные версии БД. Правки в одном месте (только в скриптах), не нужно выискивать переменные в DataSet'ах иди захардкоженых переменных.Ответ 3
А может быть на входе подавать не только бд, а и пакет изменений. Структуру которая будет описывать такой список изменений можно уже разработать в зависимости от поставленных задач. Таким образом при изменении бд вам не нужно будет редактировать код, а только файл с необходимыми изменениями.
Комментариев нет:
Отправить комментарий