Здравствуйте!
Подозреваю, что где-то в "глубинных" недрах объекта "Connector" содержаться сведения о:
- IP сервера БД;
- название БД.
Подскажите, пожалуйста, как получить эти сведния!
P.S. build 3.4.0.117
Нравится
Подозреваю, что этих сведений там нет. Предполагаю, что с БД соединяется другой компонент программы (для каждой БД - свой, например, TSMSSQLEngineLibrary.dll). Он же и расшифровывает строку соединения из файла configs.xml
с другой стороны... Connector.DBExecutor.ParseConnectionString(ConnectionString);
Спасибо, Дмитрий!
Только я не знаю способов получения ConnectionString (модификатор in) и судя по тому что я здесь "накопал", получить ее довольно таки проблематично. Так что вопрос открыт))
1. Какими методами можно получить ConnectionString из Configs.xml?
2. Каким методом можно распарсить зашифрованную строку, чтобы получить интересующие меня данные?
Добрый день!
1. Какими методами можно получить ConnectionString из Configs.xml?
С помощью объекта DBExecutor:
2. Каким методом можно распарсить зашифрованную строку, чтобы получить интересующие меня данные?
Воспользуйтесь функцией GetNewXMLStorage (в конфигурации есть примеры).
Добрый день, Игорь!
Что-то я вас не понимаю... Метод ParseConnectionString() (отмеченный вами на скриншоте) принимает в качестве входа четыре параметра.
Обратите внимание, пожалуйста, на модификаторы параметров этого метода в SDK!!! С последними тремя параметрами все понятно (их комментировать я не буду), а вот сосредоточиться на первом параметре стоит.
Так вот этот параметр имеет модификатор in, что говорит о том что он не возвращает никаких значений. Кроме этого, исходя из "говорящего" названия этот параметр является строкой подключения.
Исходя из вашей логики получается, что для того чтобы найти строку подключения, надо знать строку подключения. Не находите, что это странновато?
Мне кажется Игорь перепутал вопросы и ответы) Т.е. чтобы получить строку подключения в зашифрованном виде
"Гакало Игорь Александрович" написал:Воспользуйтесь функцией GetNewXMLStorage (в конфигурации есть примеры).
А чтобы распарсить
"Гакало Игорь Александрович" написал:С помощью объекта DBExecutor:
И добавлю уточнение :) :
Каким образом вытащить значение по атрибутам:
var XMLStorage = GetNewXMLStorage(); var Path = 'C:\\Users\\i.gakalo\\AppData\\Roaming\\Terrasoft\\3.4.0\\Settings\\Settings.xml' XMLStorage.LoadFromFile(Path);
Затем следует обращаться по примеру (снова-таки пример из конфигурации):
RootNode.Items(i).GetAttributeAsStr();
Проверил! (к сожалению не сразу дошли руки)
Этот метод не парсит зашифрованую строку!
function Main() { var XMLStorage = GetNewXMLStorage(); var Path = Connector.AppDataDirectory + 'Settings\\Configs.xml'; XMLStorage.LoadFromFile(Path) var ConnectionString = XMLStorage.RootNode.Items(0).GetAttributeAsStr('ConnectionString', ''); var SeverName, DBName, ShemaName; Connector.DBExecutor.ParseConnectionString(ConnectionString, SeverName, DBName, ShemaName); debugger; }
Видимо он предназначен для "парсировки" строки подключения в открытом виде!
Есть еще варианты?
Добрый день!
Геннадий, действительно, функция ядра ParseConnectionString ничего не возвращает.
Уточните, Вашу точную версию сборки для внесения изменений (например, 3.3.2.127).
В процессе анализа вопроса выяснилось следующее:
1) Функция ParseConnectionString в данном примере ничего не возвращает, потому что в неё передаётся строка соединения в зашифрованном виде. Если передать строку вида: '"ServerName=MyServerName","DatabaseName=MyDatabase","DBSchema=dbo"' – функция отработает корректно.
2) Метод IDBExecutor::GetSettingsString – вернёт только строку вида ""DBSchema=dbo"".
3) В ядре есть методы, которые могут получить строку соединения в виде, описанном выше, но они не вынесены в конфигурацию в целях безопасности.
Натлия, т.е. вы хотите сказать, что получение "этих" данных невозможно из глобальных объектов terrasoft? Хотелось бы поставить жирную точку в моих нелегких отношениях со строкой соединения!!!
Да, в текущей реализации этого сделать нельзя. Для реализации необходимо вносить изменения в ядро.