none
Exception RRS feed

  • Frage

  • Hi Leute,

    ich bekomme diese Ausnahme: An Error Occured Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Ich vermute den Fehler in dieser Methode:

    private void befehlAusfuehren(String s)
        {
          if (eingeloggt == false)
          {
            MessageBox.Show("Bitte erst einloggen!");
            return;
          }
          string strSQL = s;
          string strProvider = "Data Source=" + server + ";Database=" + datenbank + ";User ID=" + user + ";Password=" + passwort;
          try
          {
            MySqlConnection mysqlCon = new MySqlConnection(strProvider);
            mysqlCon.Open();
    
            if (mysqlCon.State.ToString() == "Open")
            {
              Console.WriteLine("Database Connection Open");
              Console.WriteLine("------------------------");
              MySqlCommand mysqlCmd = new MySqlCommand(strSQL, mysqlCon);
              MySqlDataReader mysqlReader = mysqlCmd.ExecuteReader();
              Console.WriteLine("Id\tName\tLastName");
              Console.WriteLine("------------------------");
             
              if (s.StartsWith("SHOW DATABASES")) //SHOW DATABASES
              {
                int tempZaehler = 0;
                while (mysqlReader.Read())
                {
                  if (mysqlReader.GetString(0) != null)
                  {
                    datenbankNamenTemp[tempZaehler] = mysqlReader.GetString(0);
                    tempZaehler++;
                  }
                }
                datenbankNamen = new string[tempZaehler];
                for (int i = 0; i < datenbankNamen.Length; i++)
                {
                  datenbankNamen[i] = datenbankNamenTemp[i];
                }
              }
              if (s.StartsWith("SHOW TABLES FROM"))
              {
                int tempZaehler2 = 0;
                while (mysqlReader.Read())
                {
                  if (mysqlReader.GetString(0) != null)
                  {
                    tabellenNamenTemp[tempZaehler2] = mysqlReader.GetString(0);
                    tempZaehler2++;
                  }
                }
                tabellenNamen = new string[tempZaehler2];
                for (int i = 0; i < tabellenNamen.Length; i++)
                {
                  tabellenNamen[i] = tabellenNamenTemp[i];
                }
              }
              if (s.StartsWith("SHOW COLUMNS"))
              {
                int tempZaehler3 = 0;
                while (mysqlReader.Read())
                {
                  if (mysqlReader.GetString(0) != null)
                  {
                    spaltenNamenTemp[tempZaehler3] = mysqlReader.GetString(0);
                    tempZaehler3++;
                  }
                }
                spaltenNamen = new string[tempZaehler3];
                for (int i = 0; i < spaltenNamen.Length; i++)
                {
                  spaltenNamen[i] = spaltenNamenTemp[i];
                }
              }
              if (s.StartsWith("SHOW TRIGGERS"))
              {
                int tempZaehler4 = 0;
                while (mysqlReader.Read())
                {
                  if (mysqlReader.GetString(0) != null)
                  {
                    triggerNamenTemp[tempZaehler4] = mysqlReader.GetString(0);
                    tempZaehler4++;
                  }
                }
                triggerNamen = new string[tempZaehler4];
                for (int i = 0; i < triggerNamen.Length; i++)
                {
                  triggerNamen[i] = triggerNamenTemp[i];
                }
              }
    
            }
            mysqlCon.Close();
            for (int i = 0; i < triggerNamen.Length; i++)
            {
              if (triggerNamen[i] != null)
              {
                //MessageBox.Show(triggerNamen[i]);
              }
              
            }
    
          }
          catch (Exception er)
          {
            MessageBox.Show("An Error Occured" + er.Message);
            Console.WriteLine("An Error Occured" + er.Message);
          }
        }
    
    Sieht jemand wo der Fehler ist?

    Mittwoch, 1. Juni 2011 11:25

Antworten

  • Hallo C.,

    Du mußt hier tatsächlich nichts vermuten. Sobald die Ausnahme ausgelöst wird, kannst Du im StackTrace genau sehen, wo sich die Ausnahme ereignet hat. Ich vermute mal stark, dass Du eines der vielen hier verwendeten Arrays (à la triggerNamen) nicht dimensioniert hast (da dies z.B. in einem if-Block geschieht, der u.U. gar nicht verarbeitet wird), z.B.

    string[] triggerNamen; // ist null
    [...]
    for (int i = 0; i < triggerNamen.Length; i++) {} // beim Zugriff auf Length wird NullReferenceException ausgelöst
    

    Exception.StackTrace-Eigenschaft:
    http://msdn.microsoft.com/de-de/library/system.exception.stacktrace.aspx

    Gewusst wie: Verwenden des Ausnahmen-Assistenten:
    http://msdn.microsoft.com/de-de/library/2bc80ssc(v=VS.100).aspx 

    P.S. Falls der Ausnahmeassistent nicht angezeigt wird, überprüfe bitte unter Debugen > Ausnahmen > Suchen > NullReferenceException ob die Ausnahme überhaupt ausgelöst wird (Häckchen unter 'Ausgelöst'). Details zur Exception kannst Du natürlich auch im Lokal-Fenster einsehen.

    Gruß
    Marcel


    • Als Antwort markiert ColleMonster Mittwoch, 1. Juni 2011 12:16
    Mittwoch, 1. Juni 2011 12:01
    Moderator

Alle Antworten

  • Warum debuggst du die Methode nicht mal? Setze einfach einen Breakpoint auf die erste Zeile der Methode und geh mit F11 Schritt für Schritt den Code durch...
    Mittwoch, 1. Juni 2011 11:46
  • Hallo C.,

    Du mußt hier tatsächlich nichts vermuten. Sobald die Ausnahme ausgelöst wird, kannst Du im StackTrace genau sehen, wo sich die Ausnahme ereignet hat. Ich vermute mal stark, dass Du eines der vielen hier verwendeten Arrays (à la triggerNamen) nicht dimensioniert hast (da dies z.B. in einem if-Block geschieht, der u.U. gar nicht verarbeitet wird), z.B.

    string[] triggerNamen; // ist null
    [...]
    for (int i = 0; i < triggerNamen.Length; i++) {} // beim Zugriff auf Length wird NullReferenceException ausgelöst
    

    Exception.StackTrace-Eigenschaft:
    http://msdn.microsoft.com/de-de/library/system.exception.stacktrace.aspx

    Gewusst wie: Verwenden des Ausnahmen-Assistenten:
    http://msdn.microsoft.com/de-de/library/2bc80ssc(v=VS.100).aspx 

    P.S. Falls der Ausnahmeassistent nicht angezeigt wird, überprüfe bitte unter Debugen > Ausnahmen > Suchen > NullReferenceException ob die Ausnahme überhaupt ausgelöst wird (Häckchen unter 'Ausgelöst'). Details zur Exception kannst Du natürlich auch im Lokal-Fenster einsehen.

    Gruß
    Marcel


    • Als Antwort markiert ColleMonster Mittwoch, 1. Juni 2011 12:16
    Mittwoch, 1. Juni 2011 12:01
    Moderator
  • Da ich Anfänger bin, kenne ich mich mit dem debugg Programmteil nicht aus. Aber danke für den Tipp!

    Ja, peinlich, peinlich, Marcel hat natürlich Recht, da war der Fehler. Ich sollte die Ausnahmenbehandlung wohl noch etwas optimieren ;-)

    Mittwoch, 1. Juni 2011 12:19