Retatrget каждый оператор SQL перед его выполнением - PullRequest
0 голосов
/ 18 декабря 2018

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

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

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

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

SELECT APPLICATION_NAME FROM **MY_SCHEMA**.APPLICATIONS

на

SELECT APPLICATION_NAME FROM **NEW_SCHEMA**.APPLICATIONS

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

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

Обновление

Обходной путь сегодня:

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

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

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

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

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