MultipleActiveResultSets = การเชื่อมต่อจริงหรือหลาย ๆ


86

ฉันมี C # บางตัวที่ฉันสร้างตัวอ่านบนการเชื่อมต่อ ( ExecuteReader) จากนั้นสำหรับทุกแถวในโปรแกรมอ่านนั้นให้ดำเนินการคำสั่งอื่น (ด้วยExecuteNonQuery) ในกรณีนี้จะดีกว่าไหมหากฉันใช้MultipleActiveResultSets=Trueการเชื่อมต่อหรือใช้การเชื่อมต่อหลายรายการ

คำตอบ:


99

มีการเพิ่มชุดผลลัพธ์ที่ใช้งานอยู่ (MARS) หลายชุดโดยเฉพาะสำหรับการดำเนินการประเภทนี้ดังนั้นคุณจึงไม่จำเป็นต้องเปิดการเชื่อมต่อสองรายการพร้อมกันเพื่อให้สามารถอ่านจาก SqlDataReader และดำเนินการแบทช์เพิ่มเติมได้

MARS เข้ากันได้กับ SQL Server 2005 ขึ้นไป อ้างจากเอกสาร MSDN:

ก่อนที่จะมีการเปิดตัว Multiple Active Result Sets (MARS) นักพัฒนาต้องใช้การเชื่อมต่อหลายตัวหรือเคอร์เซอร์ฝั่งเซิร์ฟเวอร์เพื่อแก้ปัญหาบางสถานการณ์

ดูข้อมูลเพิ่มเติมได้ที่:

MSDN Library - ภาพรวม MARS

ตัวอย่างการใช้งานการอ่านและการอัปเดตข้อมูล:

MSDN Library - Manipulating Data (MARS)เลื่อนลงไปที่ 'Reading and Updating Data with MARS'



0

วิธีที่ดีที่สุดในการทดสอบสิ่งนี้คือการเริ่มการทำงานของ SQLServer Profiler และดูว่าเกิดอะไรขึ้นที่ฝั่งเซิร์ฟเวอร์

ฉันเดาว่ามันจะไม่ดีขึ้นเพราะคุณใช้ ExecuteNonQuery () ดังนั้นในความเป็นจริงคุณไม่ได้ทำงานกับผลลัพธ์หลายรายการ


6
นั่นคือสิ่งที่ฉันคิดเมื่อฉันเขียนโค้ด แต่ถ้าฉันไม่มี MultipleActiveResultSets = True ฉันก็ยังคงได้รับข้อความ "มี DataReader ที่เปิดอยู่แล้วที่เชื่อมโยงกับคำสั่งนี้ซึ่งต้องปิดก่อน" ข้อยกเว้นใน ExecuteNonQuery
Sprintstar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.