UserControl中的ConfigurationManager连接字符串为null

时间:2014-05-21 14:02:38

标签: c# winforms configuration user-controls

我有一个应用程序通过数据层将数据传递给表单,数据层使用类似这样的东西:

public DataTable get(String query, ArrayList parameters = null)
{            
   using (iDB2Connection cn =  new iDB2Connection(ConfigurationManager.ConnectionStrings["iseries"].ToString()))
   {
       // get the data and return them    
   }
}

我有获取数据的表单,这样可以正常工作。

但是,我创建了一个UserControl,通过这个方法获取数据,当我运行我的项目时,该方法工作正常,但是,包含UserControl的表单会引发设计器异常。

  

“为了防止在加载设计器之前可能的数据丢失,   必须解决以下错误:“

我发现错误位于从<appSettings>检索连接字符串时。

它会抛出nullpointerexception。

但仅限于设计模式。当我忽略它时,一切正常,但是,我想知道如何解决这个问题。

为什么我的<appSettings>在通过我的UserControl访问时为空?

更新1

似乎我的UserControl根本无法识别<appSettings>

当我将此代码放入UserControl Load事件时,我也得到了一个空引用。

private void SelectUser_Load(object sender, EventArgs e)
{            
   txtLocation.Text = ConfigurationManager.AppSettings["location"].ToString();
}

3 个答案:

答案 0 :(得分:2)

我找到了解决方案,在designmode中,usercontrol已经在Load-event中执行代码。 由于App.config在designmode中不可用,因此未找到它,因此未加载。 所以我做了一些检查,检查是否在设计模式中:

bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
if (designMode)
{
    string location = ConfigurationManager.AppSettings["location"].ToString();
}  

答案 1 :(得分:1)

以下文章描述了WPF / Win Forms中的这个问题。请看看......

MS Forum

答案 2 :(得分:0)

我认为你只需要调整你如何获取ConnectionString

using (iDB2Connection cn =  new iDB2Connection(ConfigurationManager.ConnectionStrings["iseries"].ConnectionString)
{
    //get the data and return them    
}