2009-04-23 6 views
1

Dans mon application win - je souhaite afficher une information (ou une icône db) si le serveur de base de données n'est pas joignable. Mais je ne veux pas attendre le délai de 30sec. L'utilisateur peut configurer le serveur, l'utilisateur, pw dans ma boîte de dialogue d'options. Donc, y at-il un moyen subsonique de vérifier très rapidement si une connexion db fonctionne?Comment vérifier la connexion à la base de données rapidement?

Répondre

0

Vous pouvez trouver quelques informations sur le protocole et simplement émuler cela en utilisant les sockets TCP. Donc, c'est comme télésérer sur un serveur web et émettre des commandes HTTP. Cependant, vous feriez des commandes appropriées pour votre type de base de données. En faisant cela, vous pouvez éviter tout dépassement de temps dans le pilote ou quoi que ce soit. Alternativement, vous pouvez simplement vous connecter à l'IP: Port en utilisant TCP et voir si quelqu'un écoute. En ce qui concerne Subsonic, non.

+0

Jusqu'à présent je simplement tiré un « TOP 1 » sélectionner à subsoniques pour un de mes tables et SQLException attrapé. Donc, j'ai eu l'information .. mais avec le délai de connexion de délai de connexion db ... – isepise

+0

Ouais, si vous dites que vous obtenez toujours le délai d'attente; J'irais avec l'option de connexion de port. Ne vous embêtez pas à exécuter des commandes de protocole, juste voir si vous pouvez vous connecter. C'est juste moi. – BobbyShaftoe

+0

Ma solution actuelle consiste à d'abord Ping le serveur (System.Net.NetworkInformation.Ping). Le résultat est Ok ou IPStatus.TimedOut ou PingException. Si le ping est correct, je vérifie le serveur DB lui-même avec une commande dbb commandtimetimeout db. – isepise

0

Pouvez-vous définir le délai d'attente de connexion faible - see here for an exmaple, ou peut-être le faire sur un fil d'arrière-plan, et laisser l'utilisateur sache qu'il est en cours d'essai.

2

Vous pouvez créer une procédure simple de ping stockée puis exécutez que, avec un délai d'attente bas sur la commande SQL, quelque chose comme: méthode

SubSonic.StoredProcedure sp = SPs.PingStoredProcedure(); 
sp.CommandTimeout = 2; 
sp.Execute(); 
Questions connexes