2017-02-21 4 views
0

У меня есть простое приложение WinForms, которое в конечном итоге станет игрой. Прямо сейчас, я просто работаю над уровнем доступа к данным, и я столкнулся с проблемой. Я создал отдельный проект под названием DataAccess, и внутри этого я создал локальный файл базы данных SQL Server. Я также создал файл app.config для хранения строки соединений.C# ConfigurationManager извлекает неправильную строку соединения из app.config

Вот что конфигурационный файл:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 
     <add name="TBG_Master" 
      connectionString="Data Source=(localdb)\MSSQLLocalDb;Integrated Security=true;AttachDbFileName=|DataDirectory|\TBG_Master.mdf" 
      providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
</configuration> 

Чтобы получить строку подключения из файла app.config я использую код извлекается из this вопроса.

Assembly service = Assembly.GetExecutingAssembly(); 
ConnectionStringsSection css = ConfigurationManager.OpenExeConfiguration(service.Location).ConnectionStrings; 
string cs = css.ConnectionStrings["TBG_Master"].ConnectionString; 
return cs; 

Когда он попадет в линию, где он тянет строку соединения, используя строку в качестве ключа, он дает мне пустое ссылочное исключение. После изучения css.ConnectionString коллекции, единственная строка подключения имеет в нем выглядит следующим образом:

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

Это явно не то, что он находится в моем app.config файле, и я знаю, что нет никакого другого app.config файла в моем DataAccess проекте , Также после отладки я знаю, что он смотрит в правильную сборку.

Почему это дает мне эту строку подключения, а не правильную?

+2

Строка подключения должна существовать в проекте *, который выполняет *, а не проекты библиотеки: например. он должен быть в вашем приложении app.config проекта Winforms. – Amy

+0

Ohhhhhhhhhhhhhhhhhhhh хорошо, тогда это имеет смысл. Я изменяю свой код и отчитываюсь, если он работает :) –

+2

app.configs в библиотеках для справки или для инструментов времени компиляции. Но во время выполнения учитывается только файл app.config исполняющего проекта. – Amy

ответ

1

Как отметил @Amy, причина, по которой это не работает, состоит в том, что строка соединения не была сохранена в файле app.config для исполняемых сборок. После его перемещения он теперь работает так, как должен. Спасибо за быструю помощь :)

0

Вы также можете использовать файл machine.config для хранения строк соединения, которые не зависят от любого приложения для данной машины. Таким образом, они не должны быть в любом файле app.config, потому что все приложения автоматически считывают файл machine.config на машине, на которой они выполняются.

Смежные вопросы