C# UserControl中的ConfigurationManager连接字符串为空
我有一个应用程序,它通过数据层将数据发送到表单,数据层使用如下内容:C# UserControl中的ConfigurationManager连接字符串为空,c#,winforms,configuration,user-controls,C#,Winforms,Configuration,User Controls,我有一个应用程序,它通过数据层将数据发送到表单,数据层使用如下内容: public DataTable get(String query, ArrayList parameters = null) { using (iDB2Connection cn = new iDB2Connection(ConfigurationManager.ConnectionStrings["iseries"].ToString())) { // get the d
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的表单抛出了一个设计器异常
“为防止加载设计器之前可能的数据丢失
必须解决以下错误:”
我发现错误出现在从
检索连接字符串时
它抛出一个nullpointerexception
但仅在设计模式下。当我忽略它时,一切正常,但是,我想知道如何解决这个问题
为什么我的
在通过我的用户控件访问它们时为空
更新1
似乎我的用户控件根本不识别
当我把这段代码放在UserControl加载事件中时,我也会得到一个nullreference
private void SelectUser_Load(object sender, EventArgs e)
{
txtLocation.Text = ConfigurationManager.AppSettings["location"].ToString();
}
我认为您只需要调整获取
连接字符串的方式
using (iDB2Connection cn = new iDB2Connection(ConfigurationManager.ConnectionStrings["iseries"].ConnectionString)
{
//get the data and return them
}
下面的文章以WPF/Win的形式描述了这个问题。请看一看
我找到了解决方案,在设计模式下,usercontrol已经在Load事件中执行了代码。
由于App.config在设计模式下不可用,因此找不到它,因此无法加载。
因此,我对其进行了一些检查,以检查是否处于设计模式:
bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
if (designMode)
{
string location = ConfigurationManager.AppSettings["location"].ToString();
}
不,仍然获取“对象引用未设置为对象的实例”。出于某种原因,usercontrol中的ConfigurationManager设置为空。这是ASP.NET、Winforms还是什么?是Winforms,我添加了标记。您能够从任何其他位置读取连接字符串值吗?是,除了从UserControl读取值之外,其他一切都正常工作。以“正常”的形式,我可以完美地阅读它。