✅ 올바른 패턴 (에러 범위 제한)
|
1 2 3 4 5 6 7 8 9 10 11 |
On Error Resume Next dbCon.Execute SQL If Err.Number <> 0 Then ' DB 오류 처리 End If On Error GoTo 0 ' ✅ 여기서 정상 복귀 |
➡️ DB 실행 구간에서만 오류 무시
➡️ 이후 로직은 정상적으로 오류 감지
🧠 내부적으로 무슨 일이 일어나나?
| 명령 | 내부 상태 |
|---|---|
On Error Resume Next | 에러 발생 → Err 객체에 저장, 실행 계속 |
On Error GoTo 0 | 에러 발생 → 즉시 중단, ASP 오류 페이지 |
⚠️ 숫자
0은 “에러 처리기를 사용하지 않는다”는 의미이지
GoTo 문처럼 어딘가로 이동하는 게 아닙니다.
✅ 실무 베스트 패턴 (추천)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
On Error Resume Next Err.Clear dbCon.Execute SQL If Err.Number <> 0 Then msg = Err.Description Err.Clear On Error GoTo 0 Response.Write "<script>alert('DB 오류 발생');</script>" Response.End End If On Error GoTo 0 |
Classic ASP에서 try/catch처럼 “구간(scope)을 딱 잘라” 안전하게 쓰는 실무 패턴들입니다. 핵심은 On Error Resume Next를 최소 범위로만 켰다가, 반드시 On Error GoTo 0으로 복구하는 겁니다.
여러 위험 구간이 있는 경우 (여러 번 사용)
Resume Next → GoTo 0 를 세트로 반복
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<% ' === 위험 구간 1 === On Error Resume Next Set obj1 = Server.CreateObject("Not.Exist.Object") If Err.Number <> 0 Then Response.Write "Object1 생성 실패<br>" Err.Clear End If On Error GoTo 0 ' === 위험 구간 2 === On Error Resume Next Dim x x = CInt("ABC") ' 타입 변환 오류 If Err.Number <> 0 Then Response.Write "형 변환 오류<br>" Err.Clear End If On Error GoTo 0 ' === 위험 구간 3 === On Error Resume Next Dim y y = 100 / 0 If Err.Number <> 0 Then Response.Write "나눗셈 오류<br>" Err.Clear End If On Error GoTo 0 Response.Write "모든 구간 처리 완료<br>" %> |
