我正在重构代码以实现多数据库工作。我使用System.Data.Common类和工厂为当前选择的数据库引擎创建Exact对象。 Designed中的一些连接定义如下:
private System.Data.Common.DbConnection cn;
和分配是:
private void InitializeComponent()
{
...
this.cn = SqlFactory.CreateConnection();
...
}
和SqlFactory代码看起来像:
public DbConnection getConnection()
{
return (TSqlConection)Activator.CreateInstance(typeof(TSqlConection));
}
它在运行时可以正常工作,但是当我尝试在VS Designer中打开任何表单时,出现如下错误:
The variable 'cn' is either undeclared or was never assigned.
并且Designer无法显示要编辑的表单。
我该如何解决?
从Designer.cs中删除this.cn = SqlFactory.CreateConnection();
和有关cn
的所有内容。在InitializeComponent();
之后添加此部分。
现在您可以编辑表单,不会发生任何错误。
InitializeComponent
方法通常不应手动触摸,打开时,窗体设计器始终会覆盖其内容。 Visual Studio通常在* .Designer.cs中添加有关该注释的自动生成的注释。另外,我建议不要尝试在默认构造函数(没有参数的构造函数)中创建任何数据库连接,因为当您尝试在Designer中打开表单时,Visual Studio会调用它。
所以,您的选择是
Load
事件。InitConnections
的附加方法,该方法将执行必要的初始化。您可以在代码中的某个位置创建表单后立即调用它。