c# ADO.. NET异常:ExecuteReader:连接属性未初始化
本文关键字:属性 初始化 连接 ExecuteReader NET 异常 ADO | 更新日期: 2023-09-27 18:03:34
嗨,我想从一个简单的数据库中得到一些数据,我在主表单上使用了一个单独的控件。这个程序运行,然而,当我试图查看设计器视图的主要形式,我得到这个异常"ExecuteReader:连接属性尚未初始化。"
这是我的GetControl代码:
namespace Controls
{
public partial class GetControl : UserControl
{
private SqlCeConnection mConnection = null;
private SqlCeDataReader dataReader = null;
public SqlCeConnection Connection
{
set { mConnection = value; }
}
public GetControl()
{
InitializeComponent();
}
private void GetControl_Load(object sender, EventArgs e)
{
getData();
addData();
}
private void getData()
{
SqlCeCommand command = new SqlCeCommand("SELECT FirstName, LastName FROM Contacts", mConnection);
dataReader = command.ExecuteReader();
}
private void addData()
{
while (dataReader.Read())
{
contactList.Items.Add(dataReader.GetString(0) + " "
+ dataReader.GetString(1));
}
}
}
}
和我的主要形式:
namespace Phonebook_Application
{
public partial class Phonebook_MainForm : Form
{
SqlCeConnection con = new SqlCeConnection("Data Source=Phonebook.sdf;Persist Security Info=false;");
public Phonebook_MainForm()
{
InitializeComponent();
con.Open();
getControl1.Connection = con;
}
}
}
如果我在按钮处理程序中调用getData()和addData(),但不在表单加载中,这一切似乎都可以正常工作。项目仍然运行没有错误,我只是得到的异常,当试图查看设计器视图在主要形式。
这是因为Visual Studio在设计器中创建了窗体的实例,所以任何_Load类型的事件和默认构造函数都将被执行。
您可以通过检查DesignMode属性来检查您是否处于设计时间,尽管有限制,但您的案例DesignMode应该足够了。
的例子:
void MyMainForm()
{
InitializeComponent();
//Do any UI Init Stuff (Icons etc.) here.
if (!DesignMode)
{
//Business Logic (call databases etc.) here.
}
}