关于c#:变量未声明或从未分配过

The variable is either undeclared or was never assigned

我正在重构代码以实现多数据库工作。我使用system.data.common类和factory为当前选定的数据库引擎创建精确的对象。设计中的一些连接定义如下:

1
private System.Data.Common.DbConnection cn;

分配是:

1
2
3
4
5
6
private void InitializeComponent()
{
...
    this.cn = SqlFactory.CreateConnection();
...
}

sqlFactory代码如下:

1
2
3
4
public DbConnection getConnection()
{
    return (TSqlConection)Activator.CreateInstance(typeof(TSqlConection));
}

它在运行时可以正常工作,但是当我试图在vs designer中打开任何表单时,我会遇到如下错误:

1
The variable 'cn' is either undeclared or was never assigned.

设计器无法显示窗体进行编辑。

我怎么修?


一般情况下,不应手动触摸InitializeComponent方法,一旦打开表单设计器,它总是覆盖其内容。Visual Studio通常在*.designer.cs中添加自动生成的注释。另外,我建议不要尝试在默认构造函数(不带参数的构造函数)中创建任何DB连接,因为当您试图在设计器中打开窗体时,Visual Studio会调用它。

所以,你的选择是

  • 用参数为窗体创建一个额外的构造函数,这个构造函数可以尝试初始化数据库连接。
  • 使用表单的Load事件。
  • 创建一个额外的方法,例如在表单中调用InitConnections,这个方法将执行必要的初始化。在代码中的某个地方创建表单后,立即调用它。

  • 从designer.cs中删除this.cn = SqlFactory.CreateConnection();cn的所有内容。在InitializeComponent();后面加上此部分。

    现在您可以编辑表单,不会发生任何错误。