2010-09-15 23 views
7

Quiero verificar si el servidor no es accesible y si no es accesible quiero imprimir un mensaje amigable en mi página de inicio de sesión. Como cuando el usuario ingresó su credencial y en la excepción obtuveCómo obtener el tipo de excepción 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)

esta excepción. Entonces, ¿cómo debería saber cuándo se produjo la excepción para que pueda mostrar un mensaje?

+0

servidor? ¿servidor de base de datos? servidor de red? que entorno? la pregunta no está clara en absoluto. – vulkanino

+0

Eso es C++ esto es C# – PostMan

+0

@vulkanino: Excepción que escribo en mi pregunta sugiriendo claramente qué tipo de excepción obtengo ... está relacionada con el servidor de base de datos –

Respuesta

7

usted podría intentar la captura de un SQLException:

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

Tienes que coger la excepción:

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

Es necesario conocer al código de tiempo lo excepciones a esperar, con el fin de capturarlos en consecuencia. Como dijo Dimitrov, se lanza una SQLException cuando falla la conexión a un servidor SQL, por lo que capturar eso específicamente es una buena táctica.

que se desea capturar las diversas excepciones a fin, así:

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 
} 

tratar de poner las excepciones más inusuales en la parte superior, su forma de trabajo por la lista hacia los más comunes. La secuencia de captura es secuencial: si coloca la captura (Excepción) en la parte superior, siempre atrapará esa línea sin importar las excepciones que codifique debajo de ella.

-1

creo, es la solución ..

catch (Exception ex) { Responce.Write ("Ha ocurrido un error:" + ex.Message); }

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

Use 'ex.ToString()' en lugar de 'ex.Message' – Dinei

6

se puede utilizar el mismo método que se utiliza para comprobar si una clase padre es de tipo subclase que se realiza utilizando

obj is NotImplementedException 

donde su obj es de tipo Excepción la clase padre de todas las excepciones

o si desea utilizar el objeto de excepción más adelante, puede utilizar:

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

Esta lógica es especialmente útil cuando se tiene una clase centralizado de manejo de excepciones y no quieres añadir varias instrucciones catch

Espero que esto ayude.

+0

Este enfoque también es útil para eventos de error, en lugar de excepciones detectadas, como en un evento OnSubscriptionError de Servicios web de Exchange donde la excepción se pasa como la propiedad Excepción en un parámetro 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 y using son casi los mismos. using intentará hacer algo con el objeto, ya sea que tenga éxito o no dispondrá del objeto para detener la pérdida de memoria, pero no ignorará el error que impide que el código continúe.

Try intentará ejecutar el código dentro de las llaves, si ocurre un error ignorará el error y saldrá de la cláusula Try, luego procederá a leer el código, a menos que el error sea crítico y ocasione la falla del programa.Sin embargo, cuando se transmite using, no se asegurará de que la transmisión se cierre/elimine, porque cuando ocurre un error sale de la cláusula try antes de llegar a cualquier código que pueda agregarse en la parte inferior para eliminar (mala práctica imo).

El código Try requiere Catch (s) y/o Finally. Catch le da la oportunidad de manejar excepciones, excepciones generales o específicas. un ejemplo de uso podría ser generar un archivo de texto del error y guardarlo. using no le permite manejar excepciones.

otro ejemplo de using podría ser, usted tiene una lista de reproducción, no se puede encontrar una canción, el área de excepción nullreferece podría eliminar el elemento de la lista.

Finally siempre se ejecuta, incluso si el error es crítico y los errores en el programa, el código dentro de la cláusula finally se ejecutará, con objetos de flujo que es donde debe estar poniendo su código de disponer, de manera que si el objeto falla en la cláusula try siempre se descarta.

espero haber ayudado a presentar un poco de claridad con respecto al uso y try/catch/finally.

16

Sé que esta es una publicación anterior, pero si va a manejar todas las excepciones de la misma manera y/o está usando la información para informes de errores o algo similar (en lugar de notificar al usuario de los detalles) puede usar el seguimiento.

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