Winforms подключения строки из App.config - PullRequest
3 голосов
/ 12 мая 2010

У меня есть приложение Winforms, которое я разрабатываю на C # и которое будет служить внешним интерфейсом для базы данных SQL Server 2005. Я выкатил исполняемый файл на тестовую машину и запустил его. Он отлично работал на тестовой машине до последнего раунда изменений, которые я внес. Однако теперь на тестовой машине при открытии выдается следующее исключение:

System.NullReferenceException: Object reference not set to an instance of an object.
       at PSRD_Specs_Database_Administrat.mainMenu.mainMenu_Load(Object sender, EventArgs e)
       at System.Windows.Forms.Form.OnLoad(EventArgs e)
       at System.Windows.Forms.Form.OnCreateControl()
       at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       at System.Windows.Forms.Control.CreateControl()
       at System.Windows.Forms.Control.WmShowWindow(Message& m)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       at System.Windows.Forms.ContainerControl.WndProc(Message& m)
       at System.Windows.Forms.Form.WmShowWindow(Message& m)
       at System.Windows.Forms.Form.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Единственное, что я изменил в этой версии, которая относится к mainMenu_Load, - это способ вызова строки подключения к базе данных. Ранее я устанавливал строку со строкой подключения в каждой форме, из которой мне нужно было вызвать ее, например:

string conString = "Data Source = SHAREPOINT;Trusted_Connection = yes;" +
                   "database = CustomerDatabase;connection timeout = 15";

По мере роста моего приложения и добавления к нему форм я решил добавить в проект файл App.config. Я определил строку подключения в нем:

<connectionStrings>
  <add name="conString"
   providerName="System.Data.SqlClient"
   connectionString="Data Source = SHAREPOINT;Trusted_Connection = yes;database = CustomerDatabase;connection timeout = 15" />
</connectionStrings>

Затем я создал статическую строку, которая будет возвращать conString:

public static string GetConnectionString(string conName)
{
    string strReturn = string.Empty;
    if (!(string.IsNullOrEmpty(conName)))
    {
        strReturn = ConfigurationManager.ConnectionStrings[conName].ConnectionString;
    }
    else
    {
        strReturn = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
    }
    return strReturn;
}

Я удалил переменную conString и теперь вызываю строку подключения следующим образом:

PublicMethods.GetConnectionString("conString").ToString()

Похоже, это дает мне ошибку. Я изменил эти экземпляры, чтобы напрямую вызывать строку подключения из App.config без использования GetConnectionString. Например, в SQLConnection:

using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString))

Это также породило исключение. Однако, когда я вернулся к использованию переменной conString в каждой форме, у меня не было проблем. Чего я не понимаю, так это того, что все три метода отлично работают на моей машине для разработки, при этом я использую App.config напрямую или через статическую строку, которую я создал.

1 Ответ

4 голосов
/ 12 мая 2010

Хорошо, глупые вопросы. Вы уверены, что добавили строку подключения в app.config на тестовом компьютере? И вы уверены, что написали это правильно? Вы уверены, что разместили раздел connectionStrings в правильном месте в app.config? И вы уверены, что поместили app.config в правильное место? Вы уверены, что правильно написали "app.config", а не app.cfg или app.cofig (я уже перепутал это ранее)

...