2010-09-15 9 views
7

Je veux vérifier si le serveur n'est pas accessible et si ce n'est pas accessible je veux imprimer un message amical sur ma page de connexion. Comme lorsque l'utilisateur a entré ses informations d'identification et en exception j'ai obtenuComment obtenir le type d'exception en C#

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

cette exception. Alors, comment dois-je quand quelle exception est survenue afin que je puisse afficher un message?

+0

serveur? serveur de base de données? serveur réseau? quel environnement? la question n'est pas claire du tout. – vulkanino

+0

C'est C++ c'est C# – PostMan

+0

@vulkanino: Exception que j'écris clairement dans ma question suggérant quel type d'exception je reçois ... c'est lié au serveur de base de données –

Répondre

7

Vous pouvez essayer d'attraper un SQLException:

try 
{ 
    // Try sending a sample SQL query 
} 
catch (SQLException ex) 
{ 
    // Print error message 
} 
0

Vous devez attraper l'exception:

try 
{ 
     //Contact the server 
} 
catch(YourCouldNotContactServerException) 
{ 
    //Show some friendly message 
} 
12

Vous devez savoir à code temps que des exceptions à attendre, afin de les attraper en conséquence. Comme l'a déclaré Dimitrov, une exception SQLException est lancée lorsque la connexion à un serveur SQL échoue, ce qui est particulièrement intéressant.

Vous voulez attraper les diverses exceptions dans l'ordre, comme ceci:

try 
{ 
    //some code 
} 
catch(TypeOfException exOne) 
{ 
    //handle TypeOfException someway 
} 
catch (OtherTypeOfException exTwo) 
{ 
    //handle OtherTypeOfException some other way 
} 
catch (Exception ex) 
{ 
    //handle unknown exceptions in a general way 
} 
finally 
{ 
    //any required cleanup code goes here 
} 

Essayez de mettre les exceptions les plus insolites au sommet, travailler votre chemin vers le bas la liste vers les plus communes. La séquence de capture est séquentielle - si vous placez catch (Exception) en haut, elle sera toujours capturée sur cette ligne, quelles que soient les exceptions pour lesquelles vous le codez.

-1

je pense, la solution est ..

catch (Exception ex) { Responce.Write ("Une erreur est survenue:" + ex.Message); }

0
try 
{ 
    // Your code 
} 
catch (SQLException ex) 
{ 
    Response.Write(ex.Message);//for web apps 
Console.WriteLine(ex.Message);//for windows apps 
} 
+0

Utilisez 'ex.ToString()' au lieu de 'ex.Message' – Dinei

6

vous pouvez utiliser la même méthode que vous utilisez pour vérifier si une classe parente est la sous-classe de type qui se fait à l'aide

obj is NotImplementedException 

où votre obj est de type Exception la classe parente de toutes les exceptions.

ou si vous souhaitez utiliser l'objet d'exception plus tard, vous pouvez utiliser:

var niException=obj as NotImplementedException 
if(niException==null) //will be null when object is not of type NotImplementedException 
return; 

Cette logique est particulièrement utile lorsque vous avez une classe centralisée pour la gestion des exceptions et ne voulez ajouter plusieurs déclarations de captures

J'espère que cela vous aide.

+0

Cette approche est également utile pour les événements d'erreur, plutôt que pour les exceptions interceptées, comme dans un événement OnSubscriptionError d'Exchange Web Services où l'exception est transmise en tant que propriété Exception sur un paramètre SubscriptionErrorEventArgs. –

2
try { 
//some code } catch(TypeOfException exOne) { 
//handle TypeOfException someway } catch (OtherTypeOfException exTwo) { 
//handle OtherTypeOfException some other way } catch (Exception ex) { 
//handle unknown exceptions in a general way } finally { 
//any required cleanup code goes here } 

try/finally et using sont presque les mêmes. using va essayer de faire quelque chose avec l'objet, qu'il réussisse ou non il disposera de l'objet pour arrêter la fuite de mémoire, mais n'ignorera pas l'erreur empêchant le code de continuer. Si une erreur survient, elle ignorera l'erreur et quittera la clause Try, puis continuera à lire le code, à moins que l'erreur ne soit critique et que le programme ne se bloque.Cependant, quand les flux ne garantissent pas que le flux est fermé/éliminé, lorsqu'une erreur survient, il quitte la clause try avant d'atteindre le code que vous pourriez ajouter en bas pour l'éliminer (mauvaise pratique).

Try Le code nécessite soit une Catch (s), et/ou Finally statment. Catch vous donne la possibilité de gérer des exceptions, généralement ou des exceptions spécifiques. un exemple d'utilisation pourrait être de générer un fichier texte de l'erreur et de l'enregistrer. using ne vous laisserait pas gérer les exceptions.

un autre exemple de using pourrait être, vous avez une liste de lecture, une chanson ne peut pas être trouvée, la zone d'exception nullreferece pourrait supprimer l'élément de la liste. Est toujours exécuté, même si l'erreur est critique et le programme se bloque, le code à l'intérieur de la clause finally sera exécuté, avec les objets de flux c'est où vous devriez placer votre code de disposition, de sorte que si l'objet échoue dans la clause try il est toujours disposé.

J'espère avoir aidé à présenter une certaine clarté concernant l'utilisation et try/catch/finally.

16

Je sais que c'est un post plus ancien, mais si vous voulez gérer toutes les exceptions de la même manière et/ou utiliser les informations pour les rapports d'erreurs ou quelque chose de similaire (au lieu de notifier l'utilisateur) le suivant.

try 
{ 
    //do something here 
} 
catch(Exception ex) 
{ 
    MessageBox.Show(ex.GetType().ToString()); //will print System.NullReferenceException for example 
} 
Questions connexes