проблемы чтения строки подключения из зашифрованной секции
От: Аноним  
Дата: 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: проблемы чтения строки подключения из зашифрованной секц
От: _FRED_ Черногория
Дата: 06.08.08 05:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Шифрую секцию с настройками подключения к базе, после чего пытаю ее прочитать. Но вместо строки подключения

А>получаю что то другое.
А>Как получить строку подключения?
А>String _ConfigFile = Application.StartupPath + "//" + Application.ProductName + ".exe.config";

Настоящий путь к конфигу приложения указан в AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

А>MessageBox.Show(section.ConnectionStrings[0].ToString());   ?????????     :???:


И что значат вопросы?
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]: проблемы чтения строки подключения из зашифрованной с
От: _FRED_ Черногория
Дата: 06.08.08 07:27
Оценка:
Здравствуйте, Аноним, Вы писали:

_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]: проблемы чтения строки подключения из зашифрованной с
От: AGolovnev  
Дата: 06.08.08 11:26
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, _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  
Дата: 07.08.08 07:08
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, 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: проблемы чтения строки подключения из зашифрованной секц
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 07.08.08 19:52
Оценка:
Здравствуйте, Аноним, Вы писали:

Во-первых, в вызове
Configuration config = ConfigurationManager.OpenExeConfiguration(_ConfigFile);
нужно передавать не имя конфига, а имя сборки, к которой относится конфиг. Т.е. вместо "что-то-там.exe.config" нужно передавать "что-то-там.exe".
Во-вторых, вполне возможно тебе потребуется вызвать
ConfigurationManager.RefreshSection("имя_секции");
для форсирования чтения секции с диска.
[КУ] оккупировала армия.
Re: проблемы чтения строки подключения из зашифрованной секц
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 07.08.08 19:55
Оценка:
Здравствуйте, Аноним, Вы писали:

Ну и ещё — лучше не хардкодить текст конфига, а использовать ConfigAPI для его создания/редактирования. Ибо если впоследствии конфиг будет использоваться для чего-то ещё, твой код попросту уничтожит его содержимое.
[КУ] оккупировала армия.
Re[2]: проблемы чтения строки подключения из зашифрованной с
От: Аноним  
Дата: 08.08.08 05:35
Оценка:
Здравствуйте, koandrew, Вы писали:

K>Во-первых, в вызове
Configuration config = ConfigurationManager.OpenExeConfiguration(_ConfigFile);
нужно передавать не имя конфига, а имя сборки, к которой относится конфиг.

А если конфига нет, и он создается после авторизации пользователя на основе данных которые он ввел?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.