проблемы чтения строки подключения из зашифрованной секции
От:
Аноним
Дата:
06.08.08 03:38
Оценка:
Всем привет!
Шифрую секцию с настройками подключения к базе, после чего пытаю ее прочитать. Но вместо строки подключения
получаю что то другое.
Как получить строку подключения?
String _ConfigFile = Application.StartupPath + "//" + Application.ProductName + ".exe.config";
//создаем XML документ и загружаем в него файл конфигурации
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
String xmlData =
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>"+
"<configuration>"+
"<connectionStrings>"+
"<add name=\"ORAConn\" connectionString=\"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.x.xxx)(PORT=xxx)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xxx))); User Id=xxxxx; Password=xxxx;\"/>" +
"</connectionStrings>" +
"</configuration>";
doc.LoadXml(xmlData);
doc.Save(_ConfigFile);
Configuration config = ConfigurationManager.OpenExeConfiguration(_ConfigFile);
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
if (!section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.SaveAs(_ConfigFile, ConfigurationSaveMode.Full);
}
MessageBox.Show(section.ConnectionStrings[0].ToString()); ????????? :???:
Re: проблемы чтения строки подключения из зашифрованной секц
Здравствуйте, Аноним, Вы писали:
А>Шифрую секцию с настройками подключения к базе, после чего пытаю ее прочитать. Но вместо строки подключения А>получаю что то другое. А>Как получить строку подключения?
Help will always be given at Hogwarts to those who ask for it.
Re[2]: проблемы чтения строки подключения из зашифрованной с
От:
Аноним
Дата:
06.08.08 05:46
Оценка:
Здравствуйте, _FRED_, Вы писали: _FR>И что значат вопросы?
Почему в данном случае я не могу получить доступ к connectionString:
MessageBox.Show(section.ConnectionStrings[0].ToString());
Как получить ее значение?
Re[3]: проблемы чтения строки подключения из зашифрованной с
Здравствуйте, Аноним, Вы писали:
_FR>>И что значат вопросы?
А>Почему в данном случае я не могу получить доступ к connectionString:
Что значит "не могу"?
А>MessageBox.Show(section.ConnectionStrings[0].ToString()); А>Как получить ее значение?
И что происходит при этом вызове? Исключение? Пустую строка? Абракадабра?
Help will always be given at Hogwarts to those who ask for it.
Re[4]: проблемы чтения строки подключения из зашифрованной с
От:
Аноним
Дата:
06.08.08 07:49
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>И что происходит при этом вызове? Исключение? Пустую строка? Абракадабра?
При вызове появляется служебная информация:
data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
Re[5]: проблемы чтения строки подключения из зашифрованной с
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, _FRED_, Вы писали:
_FR>>И что происходит при этом вызове? Исключение? Пустую строка? Абракадабра? А>При вызове появляется служебная информация: А> data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
Это связано с тем, что Ваш конфиг "наследуется" от machine.config, в котором указан connection string именно такой, как Вы описали. Имя ему "localSqlServer". Для того, чтобы получить Вашу строку соединения, надо брать connection string с №1, а не с №0.
Как альтернатива, в конфиге можно указать секцию <clear /> перед объявлением собственной строки.
... << RSDN@Home 1.2.0 alpha 4 rev. 1099>>
Re[6]: проблемы чтения строки подключения из зашифрованной с
От:
Аноним
Дата:
06.08.08 11:50
Оценка:
Здравствуйте, AGolovnev, Вы писали:
AG>Это связано с тем, что Ваш конфиг "наследуется" от machine.config, в котором указан connection string именно такой, как Вы описали. Имя ему "localSqlServer". Для того, чтобы получить Вашу строку соединения, надо брать connection string с №1, а не с №0. AG>Как альтернатива, в конфиге можно указать секцию <clear /> перед объявлением собственной строки.
В конфиге прописываю как Вы говорите:
<connectionStrings>
<clear />
<add name="ORAConn" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.x.x)(PORT=xxxx)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xxx))); User Id=xxxxxxxxxxxx; Password=xxxxxxxxxxxx;">
</connectionStrings>
Когда указываю ConnectionStrings №1
section.ConnectionStrings[0].ToString();
Появляется ошибка: Index out of the range.
Re[7]: проблемы чтения строки подключения из зашифрованной с
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, AGolovnev, Вы писали:
AG>>Это связано с тем, что Ваш конфиг "наследуется" от machine.config, в котором указан connection string именно такой, как Вы описали. Имя ему "localSqlServer". Для того, чтобы получить Вашу строку соединения, надо брать connection string с №1, а не с №0. AG>>Как альтернатива, в конфиге можно указать секцию <clear /> перед объявлением собственной строки.
А>В конфиге прописываю как Вы говорите: А><connectionStrings> А> <clear /> А> <add name="ORAConn" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.x.x)(PORT=xxxx)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xxx))); User Id=xxxxxxxxxxxx; Password=xxxxxxxxxxxx;"> А> </connectionStrings> А>Когда указываю ConnectionStrings №1
А>
А> section.ConnectionStrings[0].ToString();
А>
А>Появляется ошибка: Index out of the range.
Не, Вы меня явно не так поняли Достаточно одного топопра, чтобы голову отрубить
Команда <clear /> удаляет все зарегистрированные ранее (в данном случае в machime.config) ConnectionStrings, то есть после неё строк соединения нет. Вы добавляете свою и она становится с индексом 0. То есть, при указании команды <clear /> надо использовать ConnectionStrings[0], не указывая это команду — ConnectionStrings[1].
... << RSDN@Home 1.2.0 alpha 4 rev. 1099>>
Re: проблемы чтения строки подключения из зашифрованной секц
нужно передавать не имя конфига, а имя сборки, к которой относится конфиг. Т.е. вместо "что-то-там.exe.config" нужно передавать "что-то-там.exe".
Во-вторых, вполне возможно тебе потребуется вызвать
Ну и ещё — лучше не хардкодить текст конфига, а использовать ConfigAPI для его создания/редактирования. Ибо если впоследствии конфиг будет использоваться для чего-то ещё, твой код попросту уничтожит его содержимое.
нужно передавать не имя конфига, а имя сборки, к которой относится конфиг.
А если конфига нет, и он создается после авторизации пользователя на основе данных которые он ввел?