2016-08-03 2 views
0

Это мой первый вопрос здесь, пожалуйста, быть нежным (и обеспечить конструктивную критику о том, как я могу улучшить мой вопрос) :)C# Web API ConnectionStrings Web.config не читают

Я пытаюсь подключиться в базу данных Oracle в моем проекте веб-API. Этот проект имеет app.config и web.config. Я не знаю, почему у меня есть оба, но пришло это при настройке проекта (пустой asp.net с веб-API).

Это мой код для подключения к базе данных и получить строку подключения, которая также, где я получаю NullReferenceException:

// create a connection to the database 
using (var con = new OracleConnection(ConfigurationManager.ConnectionStrings["Oracle"].ConnectionString)) 

И я включил соответствующие используя-оператор:

using Oracle.ManagedDataAccess.Client; 
using System.Configuration; 
using System.Data; 
using Oracle.ManagedDataAccess.Types; 

Мой файл web.config выглядит следующим образом:

<configuration> 
    <oracle.manageddataaccess.client> 
    <version number="*"> 
     <dataSources> 
     <!-- Customize these connection alias settings to connect to Oracle DB --> 
     <dataSource alias="ALIAS" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=IPOFSERVER)(PORT=PORTOFSERVER))(CONNECT_DATA=(SERVICE_NAME=SERVICENAME)));User Id=USERNAME;Password=PASSWORD;" /> 
     </dataSources> 
    </version> 
    </oracle.manageddataaccess.client> 
    <connectionStrings> 
    <clear/> 
    <add name="Oracle" connectionString="Data Source=ALIAS;" providerName="Oracle.ManagedDataAccess.Client"/> 
    </connectionStrings> 
</configuration> 

вещи, которые я попытался так метрономы г:

  • Использование System.Web.Configuration.WebConfigurationManager вместо
  • Проверка ссылок и т.д.
  • Добавление AppSettings ключ и значение и попытаться прочитать, что из файла web.config. Также возвращает значение null.

У меня нет никаких ошибок, кроме исключения NullReferenceException. Надеюсь, этого достаточно, чтобы предложить решение. Если нет, сообщите мне, и я предоставлю дополнительную информацию.

ответ

0

Оказывается, это было очень просто исправить, как это обычно дело. Как уже упоминалось, у меня есть app.config AND web.config.

В файле web.config находятся параметры Oracle Client, поэтому из-за этого и предыдущего опыта я понял, что строка подключения также должна быть там. Однако, определяя его в app.config, он работает! Путаница с 2 конфигурационными файлами, хотя можно было бы ожидать, что строка соединения будет определена в файле web.config, а не app.config.

Итог: ConnectionStrings должен быть в app.config.

Это исправлено для меня.

1

Попробуйте следующее. Он находится в пределах System.Configuration:

var con = ConfigurationManager.ConnectionStrings["Oracle"].ConnectionString; 

Кроме того, вы можете попробовать без очистки /> в своей конфигурации.

+0

Ах да, извините.Это то, что я изначально пытался, и в конце моего вопроса я упомянул об этом. Забыл изменить его на оригинал в примере кода. Итог: это не сработало для меня. – DevvoX

0

Я использовал файл app.config, когда у меня есть консольный прикладной проект в моем решении для тестирования. Я храню строки соединения в web.config следующим образом:

<connectionStrings> 
    <add name="NAME" connectionString="Server=Server;Initial Catalog=TABLE_NAME;User ID=ID;Password=PASSWORD;Application Name='WEBSITE'" /> 
</connectionStrings> 

Тогда я ссылаться на него в моем коде следующим образом:

protected const string ConnectionString = @"NAME"; 
+0

Это потому, что вы говорите, что это ConnectionString, который он знает, чтобы получить его из web.config? И тогда я мог бы использовать его, как показано ниже? 'new OracleConnection (ConnectionString);' – DevvoX

+0

Нет, вы можете назвать его, как хотите. Если вы правильно настроили в своем web.config, то имя вашего соединения доступно в области вашего кода. Поэтому я мог бы назвать это защитой const string SomeWhereOverTheRainbow = @ "Name"; ' и это тоже сработает. – Mickers

+0

Оказывается, web.config не читается, а app.config. Не знаю почему, но проблема решена :) – DevvoX