2 Stimmen

C# ADO.NET-Ausnahme: ExecuteReader: Verbindungseigenschaft wurde nicht initialisiert

Hallo, ich versuche, einige Daten aus einer einfachen Datenbank zu erhalten, die ich mit einem separaten Steuerelement auf dem Hauptformular erstellt habe. Dieses Programm läuft jedoch, wenn ich versuche, das Hauptformular in der Designeransicht anzuzeigen, erhalte ich diese Ausnahme "ExecuteReader: Connection property has not been initialized."

Dies ist mein Code für das 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));

            }
        }
    }
}

Und meine Hauptform:

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

Dies alles scheint gut zu funktionieren, wenn ich getData() und addData() in einem Button-Handler aufrufe, aber nicht im Formular laden. Das Projekt läuft immer noch ohne Fehler, die ich nur diese Ausnahme erhalten, wenn Sie versuchen, Designer-Ansicht im Hauptformular anzuzeigen.

1voto

DaveShaw Punkte 50735

Dies geschieht, weil Visual Studio eine Instanz Ihres Formulars im Designer erstellt, sodass alle Ereignisse vom Typ _Load und Ihr Standardkonstruktor ausgeführt werden.

Sie können überprüfen, ob Sie sich in der Entwurfszeit befinden, indem Sie die DesignMode Eigentum, obwohl es auch Einschränkungen aber in Ihrem Fall sollte DesignMode ausreichen.

Exemple :

void MyMainForm()
{
  InitializeComponent();

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X