เมื่อเราคุ้นเคยกับ ASP เราจะพบว่ามันง่ายมากนักพัฒนาจำนวนมากจะไม่คิดถึงวิธีจัดการกับข้อผิดพลาด เว็บไซต์เชิงพาณิชย์ส่วนใหญ่ที่เขียนใน ASP ไม่สนใจข้อผิดพลาด ดังนั้นให้เข้าใจวิธีจัดการกับข้อผิดพลาดของ ASP ตอนนี้
บทนำสั้น ๆ
ASP นั้นง่ายมากที่นักพัฒนาหลายคนไม่คิดเกี่ยวกับการจัดการข้อผิดพลาด การจัดการข้อผิดพลาดที่ถูกต้องสามารถทำให้แอปพลิเคชันของคุณมีเหตุผลมากขึ้น ฉันเคยเห็นเว็บไซต์เชิงพาณิชย์จำนวนมากที่เขียนใน ASP ซึ่งส่วนใหญ่ไม่สนใจการจัดการข้อผิดพลาด
มีข้อผิดพลาดหลักสามประเภท:
ข้อผิดพลาดในการรวบรวม:
ข้อผิดพลาดประเภทนี้เกิดขึ้นโดยทั่วไปเนื่องจากปัญหาไวยากรณ์ของรหัส
ASP หยุดทำงานเนื่องจากข้อผิดพลาดในการรวบรวม
เรียกใช้ข้อผิดพลาด
ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณพร้อมที่จะเรียกใช้ ASP
ตัวอย่างเช่น: หากคุณพยายามกำหนดค่าให้กับตัวแปร แต่มันเกินขอบเขตที่ตัวแปรอนุญาต
ข้อผิดพลาดเชิงตรรกะ
ข้อผิดพลาดเชิงตรรกะนั้นยากที่สุดในการตรวจจับ ข้อผิดพลาดประเภทนี้มักจะเป็นข้อผิดพลาดเชิงโครงสร้างที่คอมพิวเตอร์ไม่สามารถค้นพบได้
สิ่งนี้ต้องการให้เราตรวจสอบรหัสของเราอย่างละเอียด
เนื่องจากข้อผิดพลาดในการรวบรวมมักเกิดขึ้นพร้อมกับข้อผิดพลาดเชิงตรรกะและสามารถแสดงได้โดยทั่วไปสิ่งที่เรากังวลคือข้อผิดพลาดในการดำเนินการ ทุกอย่างยุติการทำงานของ ASP และทิ้งข้อความที่ไม่เป็นมิตรสำหรับผู้ใช้
ดังนั้นเราจะจัดการกับข้อผิดพลาดในการดำเนินการได้อย่างไร! - ก่อนอื่นมาดูคำสั่งข้อผิดพลาดเพียงอย่างเดียวที่เรามอบให้โดย ASP - ในข้อผิดพลาดต่อไปต่อไป (ฉันต้องการเตือนผู้เริ่มต้นว่ามีเฉพาะข้อผิดพลาดในการดำเนินการต่อข้อความถัดไปใน ASP และไม่มีคำแถลงข้อผิดพลาด หากคุณไม่ได้ใช้กับข้อผิดพลาดต่อคำสั่งถัดไปข้อผิดพลาดการดำเนินการทั้งหมดจะเกิดขึ้น นี่คือร้ายแรงจากนั้นรหัสข้อผิดพลาดจะ "แสดง" ต่อผู้ใช้และโปรแกรม ASP ก็จะหยุดลง
นี่คือรหัสข้อผิดพลาด:
Microsoft OLE DB Provider สำหรับข้อผิดพลาดของไดรเวอร์ ODBC 80004005
[Microsoft] [ODBC Driver Manager] ไม่พบชื่อแหล่งข้อมูลและไม่ระบุไดรเวอร์เริ่มต้น
/test.asp, บรรทัด 60
เมื่อเราใช้คำสั่ง ON ERROR RESUME NEXT ที่ด้านบนของโปรแกรมข้อผิดพลาดทั้งหมดจะถูกละเว้นและโปรแกรมจะเรียกใช้คำสั่งถัดไปโดยอัตโนมัติ ด้วยวิธีนี้โปรแกรมจะถูกดำเนินการอย่างสมบูรณ์และผู้ใช้จะไม่เห็นข้อความแสดงข้อผิดพลาดหลังจากเกิดข้อผิดพลาด แต่ก็มีข้อเสียในวิธีนี้นั่นคือถ้าโปรแกรมไม่ดำเนินการตามที่คุณจินตนาการมันจะเป็นเรื่องยากสำหรับคุณที่จะค้นหาว่ามีอะไรผิดปกติดังนั้นคุณต้องจัดการกับข้อผิดพลาดที่จำเป็น
การจัดการข้อผิดพลาด
ใน ASP วิธีที่ดีที่สุดในการจัดการกับข้อผิดพลาดคือการวางรหัสที่ด้านล่างของโปรแกรมเพื่อจัดการกับข้อผิดพลาด ฉันยังแนะนำให้ใช้บัฟเฟอร์ในโปรแกรม ASP ทุกโปรแกรม ด้วยวิธีนี้หากเกิดข้อผิดพลาดหน้าจะหยุดและเนื้อหาหน้าจะถูกล้างเพื่อให้ผู้ใช้จะไม่เห็นข้อความแสดงข้อผิดพลาดและจะมีการร้องเรียนน้อยลงเกี่ยวกับคุณ! นี่คือตัวอย่าง:
< %@ language = "vbscript" %>
<% 'ตั้งบัฟเฟอร์เป็นจริง
response.buffer = true
'เริ่มการจัดการข้อผิดพลาด
เมื่อเกิดข้อผิดพลาดต่อไป
-
การจัดการข้อผิดพลาด <% '
ถ้า err.number <> 0 แล้ว
'ล้างหน้า
Response.Clear
'แสดงข้อความแสดงข้อผิดพลาดถึงผู้ใช้
-
<html>
<head>
<title> </title>
</head>
<body bgcolor = "#c0c0c0">
<font face = "Arial"> เกิดข้อผิดพลาดในการดำเนินการของหน้า ASP นี้ <br>
โปรดรายงานข้อมูลต่อไปนี้ไปยังแผนกสนับสนุน <p>
<b> วัตถุข้อผิดพลาดหน้า </b> <br>
หมายเลขข้อผิดพลาด: < %= err.number %> <br>
ข้อความแสดงข้อผิดพลาด: < %= err.description %> <br>
ไฟล์ข้อผิดพลาด: < %= err.source %> <br>
บรรทัดข้อผิดพลาด: < %= err.line %> <br>
</font>
</body>
</html>
<%end ถ้า%>
อย่างที่คุณเห็นด้านบนฉันตั้งค่าข้อผิดพลาดครั้งแรกต่อไปเพื่อให้ข้อผิดพลาดจะไม่ส่งผลกระทบต่อการดำเนินการของโปรแกรม
การจัดการข้อผิดพลาดและฐานข้อมูล
การดำเนินการของการเพิ่มฐานข้อมูลในการจัดการข้อผิดพลาดนั้นซับซ้อนมาก หากเรามีโปรแกรมที่มีคำสั่งมากมายเพื่อเพิ่มระเบียนลงในฐานข้อมูลหากมีการดำเนินการ/อัปเดตที่ด้านล่างของโปรแกรมหากข้อผิดพลาดของเราเกิดขึ้นก่อนหน้านั้นจะจบลง! เราจะเพิ่มข้อความแสดงข้อผิดพลาดไปยังฐานข้อมูล เนื่องจากเราใช้ข้อผิดพลาดต่อไปข้อผิดพลาดทั้งหมดถูกละเว้น! แม้ว่าจะมีข้อผิดพลาดมาก่อนโปรแกรมจะยังคงเพิ่มข้อมูลลงในฐานข้อมูล
เพื่อหลีกเลี่ยงสถานการณ์นี้เราต้องทำเคล็ดลับก่อน วิธีที่ถูกต้องในการจัดการกับมันมีดังนี้:
ถ้า err.number = 0 และ objconnection.errors.count = 0 แล้ว
'คำสั่งสามารถดำเนินการได้ที่นี่เท่านั้นเนื่องจากไม่มีข้อผิดพลาด
ตั้งค่า rstresults = dbdata.execute (txtsql)
สิ้นสุดถ้า
โซลูชั่นขั้นสูงเพิ่มเติม
เมื่อเกิดข้อผิดพลาดคุณสามารถแสดงข้อความแสดงข้อผิดพลาดเพิ่มเติมได้ ด้านล่างเป็นตัวอย่างของการจัดการทั้งฐานข้อมูลและข้อผิดพลาดของหน้า ด้วยมันเราสามารถค้นพบข้อผิดพลาดทั้งหมดในโปรแกรมของเราในครั้งเดียว (เนื่องจากฉันคิดว่าภาษาอังกฤษยากที่จะพูดในบางสถานที่จึงไม่มีการแปล)
-
ถ้า err.number <> 0 แล้ว
Response.Clear
เลือก case err.number
กรณีที่ 8 'ระบุหมายเลขผิด
'แก้ไขข้อผิดพลาดที่กำหนดเองที่นี่
กรณีอื่น ๆ 'ข้อผิดพลาดทั่วไป
ถ้า isObject (objconnection) จากนั้น
ถ้า objconnection.errors.count> 0 แล้ว
-
<b> วัตถุการเชื่อมต่อฐานข้อมูล </b>
< % สำหรับ intloop = 0 ถึง objconnection.errors.count - 1 %>
ข้อผิดพลาดไม่: < %= objconnection.errors (intloop) .number %> <br>
คำอธิบาย: < %= objconnection.errors (intloop) .description %> <br>
ที่มา: < %= objconnection.errors (intloop) .Source %> <br>
sqlstate: < %= objconnection.errors (intloop) .sqlstate %> <br>
NativeError: < %= objconnection.errors (intloop) .nativeerror %> <p>
<% ถัดไป
สิ้นสุดถ้า
สิ้นสุดถ้า
ถ้า err.number <> 0 แล้ว
-
<b> วัตถุข้อผิดพลาดหน้า </b> <br>
หมายเลขข้อผิดพลาด < %= err.number %> <br>
คำอธิบายข้อผิดพลาด < %= err.description %> <br>
แหล่งที่มา < %= err.source %> <br>
ผ้าลินิน < %= err.line %> <p>
<% สิ้นสุดถ้า
สิ้นสุดเลือก
สิ้นสุดถ้า
-
ตัวอย่างข้างต้นช่วยให้เราสามารถจัดการกับปัญหามากมายที่เกิดขึ้นในฐานข้อมูลซึ่งมักใช้ในการเขียนโปรแกรมประจำวันของเรา! เราควรเห็นว่าคำสั่ง SELECT CASE ซึ่งช่วยให้เราสามารถจัดการกับข้อผิดพลาดเฉพาะ
เปลี่ยนเส้นทางและการจัดการข้อผิดพลาด
สิ่งหนึ่งที่เราควรให้ความสนใจคือวัตถุเปลี่ยนเส้นทางที่เรามักใช้ หากวัตถุเปลี่ยนเส้นทางปรากฏในหน้าเว็บการจัดการข้อผิดพลาดจะสูญเสียความหมาย ดังนั้นเราต้องจัดการกับมันก่อนที่จะเปลี่ยนดังนี้:
ถ้า err.number = 0 และ objconnection.errors.count = 0 แล้ว
Response.Clear
Response.redirect? lt; url ที่นี่>?
สิ้นสุดถ้า
ทำให้รหัสเรียบร้อยมากขึ้น
หากต้องการทำให้รหัสเรียบร้อยมากขึ้นให้วางไฟล์ที่มีข้อผิดพลาดในไฟล์ที่มีอยู่ก่อน วิธีนี้คุณสามารถใช้มันในไฟล์ใดก็ได้ นอกจากนี้ยังสะดวกในการปรับเปลี่ยน
เพิ่ม ON ERROR RESUME คำสั่งถัดไปที่ด้านบนของโปรแกรมของคุณ (หลังจากการประกาศภาษาแน่นอน)
ทำการตรวจสอบข้อผิดพลาดก่อนที่คุณจะเรียกใช้ SQL
จำเป็นต้องมีการจัดการข้อผิดพลาดก่อนที่จะใช้การเปลี่ยนเส้นทาง
ให้คุณจัดการกับข้อผิดพลาดที่มีไฟล์ที่ด้านบนของรหัส
นี่คือจุดสิ้นสุดของเนื้อหาของวิธีการจัดการข้อผิดพลาด ASP ฉันหวังว่าเนื้อหาของบทความนี้จะช่วยในการศึกษาหรือทำงานของทุกคน