Ich sehe die DUAL-Tabelle. Mittel, können Sie die Oracle verwenden :)
Für die meisten (alle?) Client/Server-DBMS gibt es keine Möglichkeit zu erkennen, dass eine Verbindung Losted ist, anders als ein DBMS für eine Aktion zu fragen. Und es gibt viele Gründe, warum eine Verbindung losted ist. Kann ein Netzwerkfehler sein, möglicherweise ..., kann ein DBA eine DB shutdowned sein.
Viele DBMS-APIs, einschließlich Oracle OCI, haben spezielle Funktionen, die es ermöglichen, ein DBMS zu pingen. Der "Ping" ist eine möglichst kleine Anfrage an ein DBMS. Das obige SELECT erfordert viel mehr Arbeit als ein solches Ping.
Nicht alle Datenzugriffskomponenten, einschließlich ADO, ermöglichen das Pingen eines DBMS mithilfe des DBMS-API-Pingaufrufs. Dann müssen Sie einen SQL-Befehl verwenden. Also, das obige SELECT ist korrekt mit ADO. Andere Option - BEGIN NULL; ENDE;. Möglicherweise verwendet es weniger DBMS-Ressourcen (kein Optimierer, keine Beschreibung einer Ergebnismenge usw.).
TTimer ist OK. Die Abfrage sollte in einem Thread ausgeführt werden, in dem die entsprechende Verbindung verwendet wird. Kein Muss, aber es ist ein anderes Thema.
Möglicherweise besteht das Problem darin, eine Verbindung zu schließen, wenn eine Verbindung unterbrochen wird. Da ein Verbindungsabschluss eine Ausnahme wegen der DBMS-API auslösen kann, befindet sich der Fehler möglicherweise in einem Fehlerzustand.
Art, dass ...
SQL Server ermöglicht Qry.ExecSQL mit SQL.Text = '' als eine Abfrage (aber nicht ''). Dies kann Hunderte von Malen pro Sekunde ausgeführt werden. –