C # ADO.NET Исключение: ExecuteReader: свойство подключения не было инициализировано - PullRequest
2 голосов
/ 27 июля 2011

Привет. Я пытаюсь получить некоторые данные из простой базы данных, которую я создал, используя отдельный элемент управления в главной форме.Однако эта программа запускается, когда я пытаюсь просмотреть основную форму в представлении конструктора, я получаю следующее исключение: «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 () в обработчике кнопок, но не при загрузке формы.Проект по-прежнему выполняется без ошибок. Я получаю это исключение при попытке просмотреть представление дизайнера в основной форме.

1 Ответ

1 голос
/ 27 июля 2011

Это происходит потому, что Visual Studio создает экземпляр вашей формы в Designer, поэтому любые события типа _Load и ваш конструктор по умолчанию будут выполняться.

Вы можете проверить, находитесь ли вы во время разработки, изучив DesignMode свойство, хотя есть ограничения , но ваш случай DesignMode должен быть достаточным.

Пример:

void MyMainForm()
{
  InitializeComponent();

  //Do any UI Init Stuff (Icons etc.) here.

  if (!DesignMode)
  {
    //Business Logic (call databases etc.) here.
  }
}
...