[C#] NullPointerException in MySql.Data beim Aufruf von Environment.Exit()

GalaxyWarrior

Erfahrenes Mitglied
[EDIT]
Erledigt. Musste die DB Connection manuell beenden vor dem Beenden der Anwendung, da scheinbar der Destruktor nicht aufgerufen wurde, dann gehts.
[/EDIT]


Hallo liebe Community,

ich habe ein C# Programm mit MySQL Anbindung geschrieben und bekomme beim Beenden immer wieder eine, nicht näher spezifizierte, NullPointerExceptions aus MySql.Data (der C# connector der MySQL Website).
Und zwar unter folgender Konstelation:

In meiner MySQL Wrapper Klasse rufe ich folgende Funktion auf, um zu Prüfen ob noch offene Instanzen vorliegen:

Code:
public OpenInstanceResult CheckOpenInstances(int empNumber)
        {
            Query("SELECT startDate, startTime, Count(*) FROM `time` WHERE `idEmployee` = '"+empNumber+"' AND `endDate` = '' AND `endTime` = ''");
            [...]
            return null;
        }

Ich habe es mal so weit eingeengt, dass der Fehler aus dem Query kommt, denn er tritt auch auf wenn ich den rest auskommentiere und einfach immer "null" zurück gebe, also habe ich den irrelevanten teil zwecks übersicht entfernt.

Die Methode "Query" sieht wie folgt aus:

Code:
        public void Query(string query)
        {
            if (reader != null && !reader.IsClosed) reader.Close();
            dbcmd = dbcon.CreateCommand();
            dbcmd.CommandText = query;
            reader = dbcmd.ExecuteReader();
            dbcmd.Dispose();
        }

Der Fehler Tritt nur ein wenn ich "dbcmd.ExecuteReader();" aufrufe, sprich den Query ausführe.
Außerdem tritt der Fehler nur auf wenn ich das Programm direkt wieder beende. Wenn ich erst noch ein Insert oder Update mache kann ich das Programm ohne Fehler beenden, sprich wenn ich mindestens eine dieser funktionen aufrufe:

Code:
        public void EndWorking(int empNumber, string startDate, string startTime, string workTime, string endDate, string endTime)
        {
            
            Query(string.Format("UPDATE `Time` SET `endDate` = '{0}', `endTime` = '{1}', `workTime` = '{2}' WHERE `idEmployee` = '{3}' AND `startDate` = '{4}' AND `startTime` = '{5}'",
                 endDate, endTime, workTime, empNumber, startDate, startTime));
        }

        public void StartWorking(int empNumber, string startDate, string startTime)
        {
            string sqlQuery = "INSERT INTO `Time` ( `idTime` , `idEmployee` , `startDate` , `startTime` , `endDate` , `endTime` , `workTime` ) " +
                                    "VALUES " +
                                    "(NULL, '" + empNumber + "', '" + startDate + "', '" + startTime + "', '', '', '')";
            Query(sqlQuery);
        }

Das Problem tritt aber nicht auf wenn das Programm über das "X" rechts oben im Fenster beendet wird, wobei das eigentlich nicht zum beenden sondern zum minimieren in die Taskliste dienen soll:

Code:
        private void Form1_Resize(object sender, System.EventArgs e)
        {
            if (FormWindowState.Minimized == WindowState)
                this.Hide();
        }

        private void Form1_FormClosing(object sender, System.EventArgs e)
        {
            if (!beenden) 
            {
                ((CancelEventArgs)e).Cancel = true;
                WindowState = FormWindowState.Minimized;
            }
        }

        private void beendenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            beenden = true;
            Application.Exit();
        }

Ich komme einfach nicht weiter, hat einer ne Idee?

Gruß GalaxyWarrior
 
Zuletzt bearbeitet:
Zurück