2017-02-27 4 views
1

Je suis en train de développer un générateur de réponse HTTP JSON Exception basé sur des messages d'erreur lors de l'exécution d'une requête de sélection dans SQL Server Management Studio. J'ai un bloc try/catch avec l'exécution de la requête select qui se passe dans l'essai et le bâtiment de la réponse avec un message d'exception se produisant dans le catch.Comment récupérer plusieurs messages d'erreur de requête SSMS à partir d'un objet Java Exception dans une instruction catch?

Mon problème est que mon générateur de réponse d'exception ne peut actuellement capturer que le premier message d'erreur d'une requête SSMS ayant échoué. S'il y a plus d'un message d'erreur provenant d'une seule requête, il ignore tout après le premier. Je voudrais améliorer le générateur de réponse d'exception afin qu'il renvoie chaque message d'erreur SSMS à partir d'une seule exécution de requête dans la même réponse. Donc, si j'efface mal deux noms de colonne dans un test unitaire, je voudrais que la réponse me donne deux fois le message 'Nom de colonne invalide'. Est-ce que quelqu'un sait si c'est possible? Existe-t-il un moyen de parcourir un objet Exception et d'obtenir plusieurs erreurs? Pas une trace de pile pour une seule erreur mais seulement le message d'erreur "sys.messages" valeur "text" pour plusieurs erreurs indépendantes d'une requête?

mes prises ressemble à ceci:

catch (Exception e) { 
     response = myresponse.exceptionResponse(e); 
    } 

Je ne suis pas sûr que l'objet d'exception contient plusieurs instances de message d'erreur à partir d'une seule requête SSMS, ou s'il suffit de tenir le premier et peut-être c'est le raison pour laquelle mon générateur de réponse d'exception ne renvoie qu'un seul message d'erreur. De plus, le code où ma réponse d'exception est construite ressemble à ceci:

public MyResponse exceptionResponse(Exception exception){ 
    JsonObjectBuilder response = Json.createObjectBuilder(); 
    if (exception != null) { 
     msg = exception.getMessage(); 
     if (msg == null) { 
     msg = NULL_EXCEPTION; 
    } 
} 
response.add("response", msg); 
response.add("id",Integer.toString(counter++)); 
isError = true; 
responseArray.add(response); 
return this; 

} `

S'il y a un moyen de itérer exceptions, comme il est avec SQLExceptions, je pourrais certainement le faire, mais je peux Ne trouve aucune information sur l'itération des objets Exception. Tout avis serait grandement apprécié!

Répondre

0

Si vous avez mal orthographié deux noms de colonne, SQL Server renverra un seul message avec le nom de la première colonne qui a été mal orthographié. Je crois qu'il n'est pas possible d'attraper toutes les erreurs qui se produisent parce qu'il n'y a qu'une seule erreur qui arrive à un moment donné. SQL Server n'essaiera pas d'aller de l'avant avec l'exécution de la requête s'il détermine que quelque chose ne va pas dans votre requête.