Dies ist eine sehr "große" Frage. Ich kann sagen, dass wir einen O/R-Mapper verwenden und jede "Abfrage" für die Datenbank ein Objekt namens PersistenceBroker benötigt. Diese Klasse ist verantwortlich für alle DB Stuff im Zusammenhang mit dem Verbinden, Authentifizieren usw.
Wir haben eine PersistenceBrokerFactory.GetCurrentBroker() geschrieben, die den "funktionierenden" Broker zurückgibt. Wenn die Datenbank plötzlich (aus welchen Gründen auch immer) fehlschlägt, wird das CONN-Objekt nach 30 Sekunden (oder was immer Sie definieren) "Timeout()". Wenn dies geschieht, zeigen wir dem Benutzer, dass er offline ist und eine Schaltfläche zum erneuten Verbinden anzeigt.
Auf der anderen Seite, um eine visuelle Anzeige, dass der Benutzer Konnektivität hat, haben wir einen Thread im Hintergrund ausgeführt, der alle 15 Sekunden auf Internetverbindung überprüft. Wir pingen 1 zu google.com. ;) Wenn das fehlschlägt, gehen wir davon aus, dass das Internet irgendwie kaputt ist, und wir aktualisieren eine Statusleiste.
Ich könnte Ihnen den ganzen Code für den Netzwerkzustandsmonitor zeigen, wenn Sie wollten. Ich nahm ein paar Bits von Google und andere, die ich mir gemacht habe :)