Мне нужна помощь с моим приложением на 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);
}