【问题标题】:ConfigurationManager connection string is null in UserControlUserControl 中的 ConfigurationManager 连接字符串为空
【发布时间】:2014-07-10 05:36:46
【问题描述】:

我有一个应用程序,它通过一个使用类似这样的数据层将数据获取到表单中:

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>检索连接字符串时。

它抛出一个空指针异常。

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

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

更新 1

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

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

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

【问题讨论】:

  • 这是 ASP.NET、Winforms 还是什么?
  • 是winforms,我加了标签。
  • 你能从任何其他地方读取连接字符串值吗?
  • 是的,除了从 UserControl 读取值外,一切正常。以“正常”的形式,我可以完美地阅读它。

标签: c# winforms configuration user-controls


【解决方案1】:

我认为您只需要调整获取 ConnectionString 的方式即可。

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

【讨论】:

  • 不,仍然得到“对象引用未设置为对象的实例。”由于某种原因,用户控件中的 ConfigurationManager 设置为空。
【解决方案2】:

下面的文章描述了 WPF/Win 表单中的这个问题。请看...

MS Forum

【讨论】:

    【解决方案3】:

    我找到了解决方案,在设计模式下,用户控件已经执行了加载事件中的代码。 因为 App.config 在设计模式下不可用,所以找不到它,因此没有加载。 所以我做了一点检查以检查是否处于设计模式:

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

    【讨论】:

      猜你喜欢
      • 2011-04-16
      • 1970-01-01
      • 2011-03-22
      • 2017-07-11
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      相关资源
      最近更新 更多