Announcement

Collapse
No announcement yet.

Eine Exception (kommt von Betriebssystem) umgehen: Datenbankzugriffsrate

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Eine Exception (kommt von Betriebssystem) umgehen: Datenbankzugriffsrate

    Hallo ich greife auf eine Access-Datenbank in einer do-while-Schleife pausenlos zu. Leider führt daran kein weg vorbei, denn die Datenbank stellt eine Schnittstelle dar, die permanent abgefragt werden muss.
    Leider kommt es nach 6 Sekunden (das sind ca 650 Zugriffe, weil ich System.Threading.Thread.Sleep(10); benutze) zu einer Exception, die aus meiner Sicht vom Betriebssystem (bei mir Windows XP Prof) verursacht wird:
    Diese lautet:
    Eine nicht behandelte Ausnahme des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
    Zusätzliche Informationen: Zusätzliche Tabellen können nicht geöffnet werden.


    Der Fehler wird hier verursacht: "MyDataReader = cmd.ExecuteReader();"

    Wie kann ich dieses Problem umgehen? Bitte beachtet, dass ich diesen permanenten Zugriff auf die Datenbank unbedingt brauche.

    P.S. Ich wette, dass "Jürgen Thomas" wieder der erste sein wird, der eine Antwort parat hat. Vielen Dank an ihn an dieser Stelle und natürlich an alle anderen auch.


    Code:
    using System;                                                                           // Standard
    using System.Collections.Generic;                                                       // Standard
    using System.Data.OleDb;                                                                // für die Datenbank
    using System.Data.SqlClient;                                                            // für die Datenbank
    using System.Text;                                                                      // Standard
    
    namespace CoCo
    {
        class Get_CosimirReturnValues
        {
            // Variablen
            private OleDbCommand cmd;
            private OleDbDataReader MyDataReader;
            private string check_return_value = "SELECT return_values FROM CosimirPrograms WHERE programNr = ";
            public string return_value;
    
    
    
    
            // Prüft ob Cosimir einen Rückgabewert geliefert hat und gibt diesen zurück: Tabelle "CosimirPrograms", die Zeile entspricht der übergebenen Programmnummer, solange bis Wert ungleich NULL
            public string get_return_values(string cosimirProgramNr, OleDbConnection con)
            {
                //string values = check_return_value + cosimirProgramNr;
                do
                {
                    cmd = new OleDbCommand(check_return_value + cosimirProgramNr, con);
                    MyDataReader = cmd.ExecuteReader();
                    MyDataReader.Read();
                    return_value = MyDataReader["return_values"].ToString();                // muss in dieser Form gar nicht sein, denn C# erkennt den Ihnhalt auch ohne Stringkonvertierung
                    System.Threading.Thread.Sleep(10);                                      // Sehr wichtig für Ressourcenfreigabe, ohne 25% mit 3%
                }
                while (return_value == "");
    
                return return_value;
            }
            // ENDE - "class Get_CosimirReturnValues"
        }
    }

  • #2
    Hi,

    ich vermute mal, das Problem liegt daran, dasss Du den DataReader nicht wieder schliesst. Versuch' mal das ganze mit der zusätzlichen Zeile ( markiert durch "<--" ).

    Code:
                do
                {
                    cmd = new OleDbCommand(check_return_value + cosimirProgramNr, con);
                    MyDataReader = cmd.ExecuteReader();
                    MyDataReader.Read();
                    return_value = MyDataReader["return_values"].ToString();                // muss in dieser Form gar nicht sein, denn C# erkennt den Ihnhalt auch ohne Stringkonvertierung
                    MyDataReader.Close();  // <--
                    System.Threading.Thread.Sleep(10);                                      // Sehr wichtig für Ressourcenfreigabe, ohne 25% mit 3%
                }
                while (return_value == "");
    HTH,
    Karsten

    Comment


    • #3
      Danke schön!!! Das war die perfekte Lösung.
      Das Programm "hängt" zwar bis es die Werte bekommt, die es braucht aber ich bin schon damit glücklich, dass es klappt
      Danke.

      Comment

      Working...
      X