2015-10-30 7 views
1

Я пересматриваю свой код для реализации работы с несколькими базами данных. Я использую классы System.Data.Common и фабрику для создания объектов Exact для выбранного в настоящий момент механизма базы данных. Некоторые определения соединений в расчетном выглядит как:Переменная либо не объявлена, либо никогда не была назначена

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. 

И Дизайнер не может отображать форму для редактирования.

Как я могу это исправить?

+2

http://stackoverflow.com/questions/8521600/the-variable-variable-name-is-either-undeclared-or-was-never-assigned – Kapol

ответ

1

Удалить this.cn = SqlFactory.CreateConnection(); и все, что связано с cn от Designer.cs. Добавить эту позицию после InitializeComponent();.

Теперь вы можете редактировать форму и ошибок не будет.

2

Метод InitializeComponent не должен касаться вручную в общем случае, конструктор форм всегда перезаписывает его содержимое после его открытия. Visual Studio обычно добавляет автогенерированный комментарий об этом в * .Designer.cs. Кроме того, я бы предложил не пытаться создать какое-либо соединение с БД в конструкторе по умолчанию (без параметров), потому что Visual Studio вызывает его при попытке открыть форму в конструкторе.

Таким образом, ваши варианты

  1. Создать дополнительный конструктор для формы с параметрами, это можно попытаться инициализировать соединение с базой данных.
  2. Используйте форму здесь Load.
  3. Создайте дополнительный метод, называемый, например, InitConnections в форме, этот метод выполнит необходимую инициализацию. Вы называете это сразу после того, как ваша форма создается где-то в вашем коде.
Смежные вопросы