2017-05-27 4 views
2

J'ai une page qui appelle un script ASP/VB classique à l'aide de la fonction jQuery Ajax, qui permet de spécifier les gestionnaires pour les résultats de réussite et d'erreur. Ces gestionnaires reçoivent la réponse du script ASP, qui exécute simplement du code SQL pour insérer un enregistrement dans une base de données. Si une erreur SQL indique une violation de clé en double, je souhaite remplacer le message d'erreur généré par un message convivial, en utilisant le code ci-dessous. Comme je l'ai découvert, cela ne fonctionne pas car le code n'atteint jamais la ligne "if conn.Errors.Count". Si le SQL génère une erreur, le code renvoie immédiatement le message d'erreur, qui inclut le numéro de ligne de la ligne "conn.Execute". Existe-t-il un moyen d'obtenir ce que je veux?Gestion des erreurs VBScript lors de l'appel d'un script à l'aide d'Ajax

set conn=CreateObject("ADODB.Connection") 
conn.Open ConnString 
conn.Execute "INSERT ... " (long statement omitted for readability) 
if conn.Errors.Count> 0 then 
    if instr(conn.Errors(0).Description, "duplicate key") > 0 then 
     Response.Write "Unable to add herb - code already exists" 
    else 
     Response.Write conn.Errors(0).Description 
    end if 
else ' success 
    Response.Write "Herb added" 
end if 
conn.Close 
set conn=nothing 
+1

Voir: [Gestion des erreurs dans ASP] (http://www.4guysfromrolla.com/webtech/060399-1.shtml) – SearchAndResQ

+0

double possible de [en utilisant « en cas d'erreur reprendre ensuite "dans ASP classique, et comment gérer les erreurs] (https://stackoverflow.com/questions/17445890/using-on-error-resume-next-in-classic-asp-and-how-to-handle- erreurs) –

+0

Salut - si ASP classique fonctionne sur la base que, sauf indication contraire, toute erreur est inattendue et il se ferme quand il en voit un. Dans votre cas, le SQL provoque une erreur - d'où le quitter. Vous avez peut-être déjà entendu parler d'une procédure d'essai pour parler du traitement des erreurs. ASP classique n'a pas try-catch, à la place, il a sur l'erreur reprendre prochaine etc. Utilisez les liens que les autres ont fourni. –

Répondre

0

Comme d'autres l'ont fait remarquer, la meilleure solution est d'utiliser "sur l'erreur de reprise suivante". donc votre code ressemblerait à quelque chose comme:

on error resume next 
set conn=CreateObject("ADODB.Connection") 
conn.Open ConnString 
conn.Execute "INSERT ... " (long statement omitted for readability) 
if Err.Number > 0 then 
    if instr(Err.Description, "duplicate key") > 0 then 
     Response.Write "Unable to add herb - code already exists" 
    else 
     Response.Write conn.Errors(0).Description 
    end if 
else ' success 
    Response.Write "Herb added" 
end if 
conn.Close 
set conn=nothing 
on error goto 0 '-- this will remove error handling for the rest of the page and can be considered optional in this case