เหตุใดฉันจึงไม่สามารถส่งคืนชุดระเบียนโดยใช้ OLEDB ในขั้นตอนการจัดเก็บได้
ฉันเคยเขียนโปรแกรมที่ทำงานบนตารางชั่วคราว (หน้าที่หลักคือการดึงข้อมูล 10 อันดับแรกของแต่ละหมวดหมู่)
ขั้นตอนการจัดเก็บใช้ ODBC เพื่อเชื่อมต่อกับฐานข้อมูลตามปกติและสามารถรับผลลัพธ์ที่ถูกต้อง แต่เมื่อใช้ oledb เพื่อเชื่อมต่อ ชุดระเบียนจะไม่สามารถส่งคืนได้ และเมื่อการดำเนินการส่งคืนชุดระเบียน ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น:
ADODB.Recordset ข้อผิดพลาด '800a0e78'
การดำเนินการที่ร้องขอโดยแอปพลิเคชันไม่ได้รับอนุญาตหากวัตถุถูกปิด
มันทำให้ฉันงุนงง ทำไมเป็นอย่างนั้น?
เนื่องจากมีความแตกต่างระหว่าง OLEDB และ ODBC นั่นคือเมื่อ ASP ได้รับชุดเรกคอร์ดจาก ODBC แล้ว ODBC จะกรองเรกคอร์ดที่สร้างขึ้นโดยการสร้างตารางออก
หรือแทรกเพื่อสร้างชุดบันทึกบางชุดที่ใช้เฉพาะตำแหน่งแต่ไม่สามารถดำเนินการใดๆ ได้ เมื่อ ASP ได้รับชุดบันทึกจาก OLEDB แล้ว OLEDB จะไม่ดำเนินการใดๆ
ชุดระเบียนเหล่านี้จะไม่ถูกกรองออก ดังนั้นเราจึงควรดำเนินการ set nocount on ก่อนที่จะส่งคืนชุดระเบียนในกระบวนงานที่เก็บไว้
ขั้นตอนการจัดเก็บไม่ได้รับอนุญาตให้ส่งคืนชุดระเบียน หากต้องการส่งคืนชุดระเบียน จะต้องดำเนินการตั้งค่า nocount off ก่อน ด้วยวิธีนี้ปัญหาจะได้รับการแก้ไข