Получить каждый оператор SQL повторно перед его выполнением

Мне нужна помощь с моим приложением C#.

В настоящее время он работает нормально, но одно из новых требований заказчика - реализовать базовую базу данных (MS SQL или Oracle) с использованием любой пользовательской схемы, выбираемой перед запуском программы.

Внутри моего приложения около 150 объектов DataCommand.

Поэтому мне нужно перехватить каждое выражение SQL внутри моего приложения до его выполнения и изменить местоположение целевого объекта (ов). Например, чтобы изменить:

SELECT APPLICATION_NAME FROM **MY_SCHEMA**.APPLICATIONS

к

SELECT APPLICATION_NAME FROM **NEW_SCHEMA**.APPLICATIONS

Насколько я понимаю, решение этой проблемы - это внедрить какой-то код в каждый IDbCommand внутри моего приложения, но не могу представить себе точку старта.

Любые предложения, пожалуйста.

Вы можете включить его в app.config либо как всю строку подключения, либо как схему как приложение.

Jaybird 18.12.2018 09:21

Это одна часть решения. Но как я могу произвести замену внутри ВСЕХ объектов DataCommand, не трогая всех?

Alexander 18.12.2018 09:29
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сегодняшний обходной путь:

Новый владелец схемы читается из файла конфигурации:

System.Configuration.AppSettingsReader configurationAppSettings = new System.Configuration.AppSettingsReader();
String strSchemaOwner = ((string)(configurationAppSettings.GetValue("DatabaseOwner", typeof(string))));

Каждая форма имеет список команд базы данных (аналог элементов управления формой), который заполняется объектами команд.

В событии FormLoad я передаю этот массив методу, который заменяет текст каждой команды:

foreach(IDbCommand pCommand in arrCollection)
{
    pCommand.CommandText = pCommand.CommandText.Replace("MY_SCHEMA", strSchemaOwner);
}

Другие вопросы по теме