У меня есть приложение 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 напрямую или через статическую строку, которую я создал.