2011-07-27 21 views
2

こんにちは私は、メインフォーム上の別のコントロールを使用して作成した単純なデータベースからデータを取得しようとしています。しかし、このプログラムは、デザイナビューでメインフォームを表示しようとすると実行されますが、この例外は "ExecuteReader:Connectionプロパティが初期化されていません。"C#ADO.NET例外:ExecuteReader:接続プロパティが初期化されていません

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)); 

      } 
     } 
    } 
} 

そして、私のメインフォーム::

これはGetControlのための私のコードです。このすべてが正常に動作するようです

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

これは、Visual Studioがデザイナでフォームのインスタンスを作成するため、_Load型のイベントと既定のコンストラクタが実行されるためです。

DesignModeプロパティを調べて、デザインタイムにいるかどうかを確認できますが、limitationsがありますが、DesignModeで十分です。

例:

void MyMainForm() 
{ 
    InitializeComponent(); 

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

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

^_ ^ちょっとおかげで非常に多く、私は私のGetControl_Load方法にあることを追加し、それが今で素晴らしい作品。 – Daniel

+0

あなたはこれを答えとしてマークし、それが有益であれば投票してください。そうすれば、このサイトはうまく動作します:http://stackoverflow.com/faq#howtoask? – DaveShaw

関連する問題