我正在使用C#开发一个Winforms应用程序,它将作为SQL Server 2005数据库的前端。我将可执行文件部署到测试机器上并运行它。在最后一轮更改之前,它在测试机器上工作得非常好。然而,现在在测试机器上打开时,它立即抛出以下异常:
这个版本中我修改的唯一与mainMenu_Load相关的内容是调用数据库连接字符串的方式。之前,我在每个需要调用它的表单上都设置了一个包含连接字符串的字符串,例如:
我随后创建了一个静态字符串,该字符串将返回conString:
我已经移除了conString变量,并且现在这样调用连接字符串:
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或通过我创建的静态字符串会抛出异常。