Pour tester si je peux vous connecter à ma base de données, j'exécute le code suivant:
using (SqlConnection connection = new SqlConnection(myConnectionString)) { try { connection.Open(); canConnect = true; } catch (SqlException) { } }
7 Réponses :
Écrivez une extension comme si: alors vous pouvez le consommer comme: p> hth. p> p>
Belle réponse mais mec, vous lancez une exception
@Cresults: Il n'y a pas de lancer dans le bloc de capture de la méthode d'extension mangeant efficacement cette exception. Je préfère avoir cette exception, mais l'OP a mentionné qu'il ne voulait pas de lancer d'exception lors de la vérification si une connexion peut être ouverte, d'où ma solution.
Soin de cette solution, SQLConnection.Open () i> obtiendra la connexion à partir de la piscine si la mise en commun est disponible. Ensuite, l'état i> sera Ouvrir i> même si la connexion est corrompue (canal TCP vers le bas par exemple). Et ensuite, l'exception ne sera soulevée que lors de l'exécution d'une commande. Une solution de contournement est d'utiliser Connection.changedatabase (connexion.database); i> Pour vérifier si la connexion est disponible.
Si cela jette une exception et que vous le gérez dans votre bloc de capture, vous savez déjà que la connexion a échoué. Je pense que vous avez répondu à votre propre question. P>
Lorsque vous essayez d'ouvrir une connexion, il n'est pas moyen d'éviter l'exception si la connexion ne peut pas être ouverte. Il peut être caché dans une fonction quelque part, mais vous allez obtenir l'exception, peu importe quoi. P>
Il a été conçu comme celui-ci, car vous vous attendez généralement à pouvoir vous connecter à la base de données. Une connexion échouée est l'exception em>. P>
qui étant dit, vous pouvez tester l'état de la connexion actuel em> à tout moment en cochant la propriété état code>. p>
Je pense que la vraie réponse ici est ping. sauf si vous vérifiez explicitement pour voir si une connexion SQL est possible 9/10, vous devez savoir si quelque chose est un serveur SQL. Cela vous ferait économiser cette mauvaise utilisation de la mémoire d'une exception qui est ce que je parie que vous êtes vraiment après. P> p>
Vous pouvez toujours utiliser la classe Si la chaîne de connexion est correcte, mais le serveur de base de données que vous connectez est en panne, vous allez toujours obtenir une sauf. Type d'inutile de vérifier la qualité de la chaîne si le point final que vous connectez peut potentiellement être hors ligne. P> ConnectionsRingBuilder CODE> et vérifier l'existence de chaque pièce requise par une chaîne de connexion avant de tenter de l'ouvrir. p>
Vous ne pouvez pas éviter l'exception à venir lors de la connexion de la base de données mais avoir une fonction qui gère très bien cela. J'utilise cette fonction qui retourne true si la connexion existe.
public static bool IsSQLConnectionAvailable() { SqlConnection _objConn = new SqlConnection(); try { _objConn.ConnectionString = ConfigurationManager.ConnectionStrings["DefaultSQLConnectionString"].ConnectionString; _objConn.Open(); } catch { return false; } finally { if (_objConn.State == ConnectionState.Open) _objConn.Close(); } return true; }
J'aimerais partager toute la solution que j'ai mise en place pour éviter de vérifier la connexion à chaque appel. Si la chaîne de connexion est incorrecte, une exception arrête l'exécution, sinon la tentative d'ouverture des connexions est effectuée une seule fois pour chaque connecteur.
Étant donné que la connexion est souvent multipliée, j'ai ajouté un syncobj utilisé par le verrouillage voici l'appel à partir de la méthode qui instanciate la connexion P> / code> qui vérifie p>
Pourquoi voulez-vous éviter l'exception?