2009-03-12 4 views
2

У меня странная вещь, которая происходит с моим файлом app.config. Мой ConnectionStrings раздел содержит следующее:app.config weirdness

<connectionStrings> 
    <add name="Connection" connectionString="Data Source=TheServer; 
    Initial Catalog=TheDatabase;IntegratedSecurity=SSPI" 
    providerName="System.Data.SqlClient"/> 
</connectionStrings> 

Однако, когда я запрашиваю раздел через ConfigurationManager.ConnectionStrings [0], я получаю назад это строка соединения:

Data Source=.\\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true 

Где это получает это значение из?

ответ

6

Он читается из machine.config, вы можете убедиться, чтобы удалить все строки соединения, прежде чем добавлять свои собственные:

<connectionStrings> 
    <clear/> 
    <add name="Connection" connectionString="Data Source=TheServer; 
    Initial Catalog=TheDatabase;IntegratedSecurity=SSPI" 
    providerName="System.Data.SqlClient"/> 
</connectionStrings> 

Или просто никогда не ссылаться на ваши строки подключения с помощью индексов, имена использовать вас дать им:

ConfigurationManager.ConnectionStrings["Connection"] 
+0

Я считаю, что это правильный ответ, избили меня. – NeedHack

1

Он исходит из machine.config. .NET Автоматически объединяет разделы строки подключения (и некоторые другие, которые, как я полагаю), конфигурацию вашего приложения (или веб-конфигурацию) и ваш machine.config.

Вы можете прочитать о том, как это работает в ASP.NET here.

+0

Я вижу. Спасибо. Почему он не ссылается на файл app.config? Раньше этого не было. – woodstock

+0

@woodstock: это, но вы вызываете его по индексу, а 0 - это первый, определенный в иерархии. –

1

Он исходит из другой конфигурации: либо вверху app.config в дереве, либо в конфигурации машины. Чтобы игнорировать что-либо еще, используйте <clear />, чтобы избавиться от всего, что не в текущей конфигурации.

<connectionStrings> 
    <clear /> 
    <add name="Connection" connectionString="Data Source=TheServer; 
    Initial Catalog=TheDatabase;IntegratedSecurity=SSPI" 
    providerName="System.Data.SqlClient"/> 
</connectionStrings> 
0

Дополнение к ответу Ната, это лучше:

ConfigurationManager.ConnectionStrings["Connection"] 
0

Хотя на вопрос отвечал Джейсон Пуньон, я настоятельно рекомендую обращаться к вашим строкам подключения через их имя, а не их индекс. , например.

ConfigurationManager.ConnectionStrings["Connection"] 
+0

Ой, немного поздно ... –