ในการเขียนโปรแกรมมักใช้ธุรกรรม ธุรกรรมที่เรียกว่าเป็นชุดของการดำเนินการที่ต้องดำเนินการทั้งหมดให้สำเร็จ ตราบใดที่การดำเนินการหนึ่งล้มเหลว ขั้นตอนอื่นๆ ทั้งหมดจะต้องถูกยกเลิกด้วย ตัวอย่างเช่น การใช้ ASP เพื่อพัฒนาระบบฮาร์ดดิสก์เครือข่าย ส่วนการลงทะเบียนผู้ใช้ต้องทำดังต่อไปนี้
บันทึกข้อมูลผู้ใช้ลงในฐานข้อมูล เปิดโฟลเดอร์เพื่อให้ผู้ใช้จัดเก็บบันทึกการดำเนินการเริ่มต้นของผู้ใช้
ต้องใช้สามขั้นตอนนี้ ธุรกรรม มิฉะนั้นในกรณีของการทำงานของดิสก์ ความล้มเหลวโดยไม่ยกเลิกการดำเนินการฐานข้อมูลจะส่งผลให้เกิดปรากฏการณ์ "ผู้ใช้ที่ตายแล้ว" ที่สามารถเข้าสู่ระบบได้เท่านั้น แต่ไม่สามารถดำเนินการได้
เนื่องจากประวัติการพัฒนาพิเศษของระบบฐานข้อมูล ทุกอย่างตั้งแต่ Access ไปจนถึง DB2 จึงรองรับธุรกรรมได้ ดังนั้นขั้นตอนข้างต้นจึงสามารถแสดงได้ดังนี้:
On Error Resume Next
Step 1:
บันทึกข้อมูลผู้ใช้ลงในฐานข้อมูลในสภาพแวดล้อมของธุรกรรม
หากเกิดข้อผิดพลาด
ปิดการเชื่อมต่อและ exitElse
ขั้นตอนที่ 2: สร้างโฟลเดอร์หากเกิดข้อผิดพลาดแล้ว
ย้อนกลับการดำเนินการฐานข้อมูลแรกและออกจาก Else
ขั้นตอนที่ 3: ใช้งานฐานข้อมูลบันทึกในสภาพแวดล้อมของธุรกรรมหากเกิดข้อผิดพลาดแล้ว
ย้อนกลับขั้นตอนแรก ลบโฟลเดอร์ที่สร้างในขั้นตอนที่สอง และออกจาก End If
สิ้นสุดถ้า
สิ้นสุดถ้า
ส่งธุรกรรมของการดำเนินการฐานข้อมูลครั้งแรก ส่งธุรกรรมของการดำเนินการฐานข้อมูลที่สอง
จุดสิ้นสุด
ในทุกขั้นตอน หากล้มเหลว คุณจะต้องย้อนกลับขั้นตอนก่อนหน้าด้วยตนเอง ทำให้โปรแกรมซับซ้อนและเข้าใจยาก หากโปรแกรมได้รับการอัปเดตในอนาคตและเพิ่มขั้นตอนอื่นๆ จะต้องซ้อนเลเยอร์ของ If...Else...End If มากขึ้น ทำให้ขั้นตอนการทำงานของโปรแกรมซับซ้อนมากขึ้น
วิธีแก้ไขที่ถูกต้องคือการใช้ฟังก์ชันควบคุมธุรกรรมของ ASP เมื่อติดต่อบริการ MTS แล้ว IIS สามารถควบคุมระบบต่างๆ ที่รองรับธุรกรรมได้ เมื่อโปรแกรมส่งสัญญาณ "ความล้มเหลว" ระบบทั้งหมดที่สนับสนุนธุรกรรมจะย้อนกลับโดยอัตโนมัติ แม้ว่าการดำเนินการจะเสร็จสมบูรณ์อย่างเป็นทางการก็ตาม ธุรกรรมการสนับสนุนจะถูกย้อนกลับ มอบวิธีการย้อนกลับที่สะดวกด้วยตนเอง ตัวอย่างข้างต้นถูกเขียนใหม่โดยใช้ฟังก์ชันการควบคุมธุรกรรม ASP ดังนี้:
<%@ TRANSACTION = Required %>
เมื่อเกิดข้อผิดพลาด ดำเนินการต่อ
ตั้งค่าถัดไป Conn=Server.CreateObject("ADODB.Connection")
คอน.เปิด....
Conn.ดำเนินการ "INSERT...."
คอน.ปิด
ตั้งค่า Conn=ไม่มีอะไร
ตั้งค่า Conn2=Server.CreateObject("ADODB.Connection")
Con2.เปิด....
Conn2.ดำเนินการ "INSERT..."
Conn2.ปิด
ตั้งค่า Conn2=ไม่มีอะไร
ตั้งค่า FSO=Server.CreateObject("Scripting.FilesystemObject")
FSO.CreateFolder "....
ถ้าเกิดข้อผิดพลาด
ObjectContext.SetAbort 'แจ้งส่วนประกอบทั้งหมดที่รองรับธุรกรรมเพื่อย้อนกลับและเรียกใช้โค้ดย้อนกลับด้วยตนเอง
อื่น
ObjectContext.SetComplete
สิ้นสุดถ้า
ตั้งค่า FSO = ไม่มีอะไร
ย่อยใน TransactionAbort
ตอบกลับเขียน "ข้อผิดพลาด"
FSO.DeleteFile Server.Mappath("a.txt") 'การย้อนกลับด้วยตนเองของ FSO - ลบโฟลเดอร์
จบหมวดย่อย
SubOnTransactionCommit
ตอบกลับเขียน "ทำงานให้สำเร็จ"
จบหมวดย่อย
%>
<%@ TRANSACTION = Required %> ในบรรทัดแรกระบุว่าไฟล์ ASP ของเพจนี้ต้องการการสนับสนุนธุรกรรม MTS การดำเนินการทั้งหมดที่อยู่ตรงกลางจะถูกเขียนตามลำดับปกติโดยไม่พิจารณาถึงปัญหาการย้อนกลับ ตรวจสอบว่ามีข้อผิดพลาดในตอนท้ายของโปรแกรมหรือไม่ ถ้าเป็นเช่นนั้น ให้เรียกเมธอด SetAbort ของ ObjectContext IIS จะแจ้งส่วนประกอบทั้งหมดที่สนับสนุนธุรกรรมผ่านบริการ MTS เพื่อย้อนกลับ (ฐานข้อมูลส่วนใหญ่) และเรียกใช้ Sub OnTransactionAbort เพื่อย้อนกลับการดำเนินการที่ไม่สนับสนุนธุรกรรมด้วยตนเอง หากไม่มีข้อผิดพลาดเกิดขึ้น ให้โทร เมธอด SetComplete ของ ObjectContext นั้น Sub OnTransactionCommit จะถูกเรียกใช้เพื่อแสดงข้อความแสดงความสำเร็จ
โปรแกรม ASP ทั้งหมดไม่จำเป็นต้องเขียนโค้ดซ้ำซ้อนสำหรับการวินิจฉัยข้อผิดพลาดและการดำเนินการย้อนกลับเท่านั้น แม้ว่าจะมีการเพิ่มการดำเนินการแบบหลายขั้นตอนในอนาคต แต่จะต้องได้รับการควบคุมใน Sub OnTransactionAbort เท่านั้น สะดวกมากและโปรแกรมเมอร์สามารถเน้นการเขียนขั้นตอนมากกว่าการเขียนโค้ดแก้ไขข้อผิดพลาด
ในความเป็นจริง ASP ยังมีฟังก์ชันที่มีประโยชน์อีกมากมายรอให้เราใช้งาน อย่าคิดว่าเนื่องจาก ASP ใช้ภาษาสคริปต์ ฟังก์ชันจึงต้องอ่อนแอ