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.
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" } }
Comment