Vedo la tabella DUAL. Significa che stai usando l'Oracle :)
Per la maggior parte (tutti?) Dei DBMS client/server non c'è modo di rilevare, che una connessione è persa, se non quella di chiedere un DBMS per qualche azione. E ci sono molte ragioni, perché una connessione è persa. Potrebbe essere un errore di rete, potrebbe essere ..., potrebbe essere un DBA che ha arrestato un DB.
Molte API DBMS, incluso Oracle OCI, dispongono delle funzioni speciali che consentono di eseguire il ping di un DBMS. Il "ping" è una richiesta il più piccola possibile a un DBMS. Il precedente SELECT richiede molto più lavoro, rispetto a tale ping.
Ma non tutti i componenti di accesso ai dati, incluso ADO, consentono di eseguire il ping di un DBMS utilizzando la chiamata ping dell'API DBMS. Quindi devi usare un comando SQL. Quindi, la SELECT sopra è corretta con ADO. Altra opzione - BEGIN NULL; FINE;. Potrebbe utilizzare meno risorse DBMS (nessuna necessità di ottimizzazione, nessuna descrizione di un set di risultati, ecc.).
TTimer è OK. La query deve essere eseguita in un thread, in cui viene utilizzata la connessione corrispondente. Non è un must, anche se, ma è un problema diverso.
Il potenziale problema potrebbe essere quello di chiudere una connessione, quando una connessione viene persa. Poiché la chiusura della connessione può generare un'eccezione a causa dell'API DBMS potrebbe essere in uno stato non riuscito.
Kind of ... che
fonte
2010-02-18 15:39:52
SQL Server consente a Qry.ExecSQL con SQL.Text = '' come query (ma non ''). Questo può essere eseguito centinaia di volte al secondo. –