Извлечение строки подключения из файла appconfig в c # - PullRequest
7 голосов
/ 23 декабря 2011

В моем файле app.config объявлена ​​следующая строка подключения:

  <connectionStrings>
    <add name="SqlConnectionString" connectionString="Data Source=xxx.xx.xx.xx;Initial Catalog=xxxxx;User Id=xx;Password=xxx;" providerName="System.Data.SqlClient" />
  </connectionStrings>

Когда я пытаюсь получить эту строку подключения, используя следующий фрагмент кода C #, я получаю значение null. Я не могу получить строку подключения. Что-то не так в синтаксисе?

Первая попытка:

var settings = ConfigurationManager.ConnectionStrings["SqlConnectionString"];
string result = settings.ConnectionString;

Вторая попытка:

string result = ConfigurationSettings.AppSettings["SqlConnectionString"];

Ответы [ 10 ]

10 голосов
/ 23 декабря 2011

Во-первых, вы должны добавить тег appSettings

 <connectionStrings>
    <appSettings>
      <add name="SqlConnectionString" connectionString="Data Source=xxx.xx.xx.xx;Initial Catalog=xxxxx;User Id=xx;Password=xxx;" providerName="System.Data.SqlClient" />
    </appSettings>
  </connectionStrings>

Во-вторых, добавить ссылку на System.Configuration в ваш проект и вставить using System.Configuration в источник.

Затем вы можете использовать ConfigurationManager.AppSettings для доступа к настройке вашей конфигурации:

string result = ConfigurationSettings.AppSettings["SqlConnectionString"];
6 голосов
/ 23 декабря 2011

Для не-веб-проекта и с app.config, настроенным как в OP, вот что я обычно делаю, поскольку файл конфигурации меняет имена при компиляции приложения (на yourapp.exe.config):

    public static Configuration ExeConfig()
    {
        Assembly service = Assembly.GetAssembly(typeof(YourClass));
        return ConfigurationManager.OpenExeConfiguration(service.Location);
    }

Затем для ссылки на s-ю строку подключения:

ExeConfig().ConnectionStrings.ConnectionStrings[s].ConnectionString
2 голосов
/ 19 ноября 2012

У меня та же проблема, но после долгих исследований я обнаружил, что причина, по которой код генерирует исключение нулевой ссылки, заключается в том, что если вы используете имя connectionString, оно вернет null и при попытке вызвать ToString () или свойство ConnectionString свойства ConfigurationManager.ConnectionStrings , при котором генерируется исключение, поэтому для
возврата правильной строки подключения необходимо выполнить индексирование в ConnectionStringSettings, используяследующий код.

ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings[/* index */];

string conString = conSettings.ConnectionString;
1 голос
/ 31 марта 2017

Я делаю это, чтобы получить строку подключения "OracleDbContext" ...

ConfigurationManager.ConnectionStrings["OracleDbContext"].ConnectionString;

мой web.config выглядит так:

  <connectionStrings>
    <add name="OracleDbContext" 
         providerName="Oracle.ManagedDataAccess.Client" 
         connectionString="User Id=oracle_user;              
                           Password=oracle_user_password;
                           Data Source=oracle" />
  </connectionStrings>
1 голос
/ 16 августа 2015

Одна вещь, которую я заметил при компиляции WinForm App в VS 2013:

Я добавляю строки подключения в мой файл настроек - который обновляет мой файл app.config

Когда я ожидал:

var connectionString = ConfigurationManager.ConnectionStrings["theConnectionStringName"].ConnectionString;

Я должен написать:

var connectionString = ConfigurationManager.ConnectionStrings["MyAppNameSpace.Properties.Settings.theConnectionStringName"].ConnectionString;

Все остальное как обычно

1 голос
/ 23 декабря 2011

Еще одной возможной причиной сбоя может быть неправильное разрешение имен .NET Framework.

Если имя приложения длиннее, чем имя 8.3 (например, GreatStuff.exe), оно может быть запущено с помощью его короткого8.3 эквивалентного имени (в моем примере GREATS~1.EXE) и .NET будет искать файл app.config, просто добавляя .config к короткому имени.И это не удастся.

0 голосов
/ 03 ноября 2013

есть другой способ сделать это для консольного приложения:

    <configuration>
  <appSettings>
    <add key="SqlConString" value="some connection string"/>
  </appSettings>

, чтобы прочитать его

using System.Configuration;

и затем использовать

string CONSTRING;
AppSettingsReader ap = new AppSettingsReader();
CONSTRING = ap.GetValue("SqlConString",typeof(string)).ToString();
0 голосов
/ 27 апреля 2013

Та же проблема.Основываясь на комментариях Мерлина Моргана-Грэма и Эдварда Чжу, я перестроил свой проект, который использовал app.config для создания файла myapp.exe.config со строкой соединения.Затем сработал оригинальный первый синтаксис.

Другая проблема: Попытка с помощью диалогового окна свойств проекта изменить строку подключения и добавила "project.My.Mysettings.. К имени строки подключения. Что вызвало ошибку.

0 голосов
/ 23 декабря 2011

Первый синтаксис определенно действителен.

Возможная причина заключается в том, что файл конфигурации неправильно загружен в приложение. Я хочу убедиться, что это за тип проекта. Если это приложение WinForm или консольное приложение, вам нужно установить его в app.config. Он будет скомпилирован в .config и загружен при запуске приложения. Если это веб-приложение, боюсь, вы не сможете добавить узел в app.config, так как он не будет загружен. Вы должны поместить это в web.config. Кроме того, если вы хотите поместить настройки в файл конфигурации с помощью библиотеки .net (DLL), файл конфигурации не будет загружен в любом случае. Файл конфигурации будет следовать только за основным приложением.

0 голосов
/ 23 декабря 2011
<configuration>
  <appSettings>
   <add key="ConnectionString" value="blah blah blah"/>  </appSettings>
  </configuration>

Будет ли вышеуказанная конфигурация работать с API / кодом, например:

string str = ConfigurationSettings.AppSettings["SqlConnectionString"];
...