2014-01-30 3 views
1

У меня есть два проекта. Один - это веб-сайт & другой - это формы окон. Веб-проект подключается к базе данных, но проект windows генерирует исключение NullReferenceException, считывающее строку подключения.NullReferenceException пытается прочитать строку подключения

Я использую те же классы для подключения обоих проектов. Соединение устанавливается с помощью LINQTOSQL.

Вот моя строка соединения:

<connectionStrings> 
    <add name="GPSystemConnectionString" 
     connectionString="Data Source=.;Initial Catalog=GPSystem;User ID=***;Password=***" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

Это, как я читаю его.

string CS = ConfigurationManager.ConnectionStrings["GPSystemConnectionString"].ConnectionString; 

(Исключение происходит на этой линии) ..... (ссылка на объект не указывает на экземпляр объекта.)

Примечание: Я использую тот же класс для подключения обоих проектов ... один соединяется, а другой терпит неудачу.

Пожалуйста, помогите мне с этим!

Заранее спасибо.

+2

Вы должны иметь соответствующий запись в app.config (для WinForms) * и * web.config (для веб-проекта) - эти конфигурации читаются для * исполняющей сборки * и * не используются *. – user2864740

+0

@ user2864740: Их можно разделить. См. Мой ответ. –

+0

@PatrickHofman Ваш ответ действительно просто украл конфигурацию ;-) – user2864740

ответ

4

Вам нужно иметь запись в app.config для строки подключения в вашем приложении окна.

Если у вас нет App.Config файла, то добавьте его.

и поставить запись, как показано ниже

<?xml version="1.0"?> 
<configuration> 
    <connectionStrings> 
    <add name="GPSystemConnectionString" connectionString="..." /> 
    </connectionStrings> 
</configuration> 

В вас .cs файл

using System; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Windows.Forms; 

var connectionString=ConfigurationManager.ConnectionStrings["GPSystemConnectionString"].ConnectionString; 
1

Если вы хотите get the configuration section from another assembly использовать это:

Assembly assembly = ...; /* get the assembly to read config from */ 

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(assembly.Location); 

string CS = configuration.ConnectionStrings["GPSystemConnectionString"].ConnectionString; 
+0

Может ли это использоваться для доступа к 'web.config' из приложения WinForms (в отличие от' app.config 'другого приложения)? Я никогда не использовал это раньше. – user2864740

+0

@ user2864740: OP говорит, что он разделяет классы, поэтому я думаю, что он также имеет общую сборку. В этом случае это достойное решение. Также можно прочитать web.config, но вам нужен «WebConfigurationManager». –

0

В моем случае этот вопрос должен был к ConnectionString в моей 64-битной машине.Config

C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\Config

Вместо стандартной 32-разрядное

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config

Чтобы исправить удалить Предпочитают 32-разрядные настройки на вкладке Построить Свойства проекта Build tab of Project

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