8
votes

Testez la connexion SQL sans lancer d'exception

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) { }
}


1 commentaires

Pourquoi voulez-vous éviter l'exception?


7 Réponses :


3
votes

Écrivez une extension comme si: xxx

alors vous pouvez le consommer comme: xxx

hth.


3 commentaires

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 () obtiendra la connexion à partir de la piscine si la mise en commun est disponible. Ensuite, l'état sera Ouvrir 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); Pour vérifier si la connexion est disponible.



3
votes

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.


0 commentaires

12
votes

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.

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 .

qui étant dit, vous pouvez tester l'état de la connexion actuel à tout moment en cochant la propriété état .


0 commentaires

1
votes

Je pense que la vraie réponse ici est ping. xxx

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.


0 commentaires

0
votes

Vous pouvez toujours utiliser la classe ConnectionsRingBuilder et vérifier l'existence de chaque pièce requise par une chaîne de connexion avant de tenter de l'ouvrir.

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.


0 commentaires

1
votes

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;
    }


0 commentaires

0
votes

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 / code> qui vérifie xxx

voici l'appel à partir de la méthode qui instanciate la connexion xxx


0 commentaires