2009-12-12 17 views
2

J'ai une page .aspx appelant le service Web d'une page .asmx. Dans ce service Web .net, je tente d'ouvrir une connexion de base de données à SQL Server 2008. La connexion échoue. Je ne suis pas sûr pourquoi. Je fais ceci dans un try/catch et le catch est touché quand je débogue. Je ne suis pas sûr de ce que je peux produire là car je n'ai pas accès au système de fichiers du serveur pour écrire un fichier journal.Sortie de l'exception d'une erreur SQLException

Je trouve cette annonce:

try 
{ 
    SqlCommand cmd = 
     new SqlCommand("raiserror('Manual SQL exception', 16, 1)",DBConn); 
    cmd.ExecuteNonQuery(); 
} 
catch (SqlException ex) 
{ 
    string msg = ex.Message; // msg = "Manual SQL exception" 
} 

ici et il pourrait faire l'affaire pour moi, mais je ne sais pas comment faire la sortie de chaîne de msg à la page qui a appelé ce service web? Existe-t-il un moyen de propager la chaîne d'exception en faisant en sorte que la page appelante implémente également ce même gestionnaire d'exceptions?

Merci :) //

+0

Merci pour l'édition Mark, ça a aidé :) – Spanky

Répondre

3

Votre devrait être en mesure de piéger l'exception SQL comme un type specifc et lire le message d'erreur particulière:

try{ 
    ... 
} 
catch(SQLException sqlex) 
{ 
    /// do some work here with sqlex.Message 
} 
catch(Exception ex) 
{ 
    /// this will trap any other 'type' of exception incase a sqlex is not thrown. 
} 

Vous pouvez ensuite jeter ce « la pile » qui signifie renvoyer à la méthode appelé le code défaillant:

catch(SQLException sqlex) 
    { 
     throw sqlex; 
    } 

Ou vous pourriez jeter un nouveau message basé sur l'exception sql:

catch (SQLException sqlex) 
    { 
    throw new Exception("My method threw an exception in SQL:" + sqlex.Message); 
    } 

Toutes ces approches vous permettent d'envoyer des messages dans la pile au client qui a appelé le SQL. C'est là que vous devriez rendre votre message.

+0

Voilà ce que j'étais après, génial!Merci // :) – Spanky

1

Si vous définissez ce qui suit dans web.config alors les détails d'exception seront affichés dans le navigateur.

<customErrors mode="off" /> 

Ou vous pouvez essayer d'installer ELMAH, il est très facile à mettre en place, et peut être configuré pour tenir un journal des détails d'exception dans la mémoire.

+0

Bonne idée, je vais vérifier pour voir l'état de cela. Merci :) :) – Spanky

1

Vous pouvez activer le traçage de votre page ou une application puis faites:

Trace.Write ("This is my exception:\n" + exception.ToString()); 

Ensuite, allez à http://yourhost/Trace.axd et vous serez en mesure de voir la sortie.

+0

Cool, merci // :) – Spanky

0

Puisque vous avez dit que vous pouvez déboguer, (En supposant que vous pouvez modifier le code) pourquoi ne pas faire:

string strEx = Ex.ToString(); //Ex is the caught exception. 

Ensuite, il suffit de copier les données STREX de la fenêtre montre IDE Visual Studio/Visualiseur & puis utilisez la Les données.

1

Si vous pouvez accéder au débogueur, vous pouvez également faire une

Debug.WriteLine(ex.Message) 

dans votre déclaration de capture.

Cela écrira l'erreur dans la fenêtre de sortie.

+0

Bien, je vais essayer ça. Merci // :) – Spanky