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