MultipleActiveResultSets = Đúng hay nhiều kết nối?


85

Tôi có một số C # trong đó tôi tạo trình đọc trên kết nối ( ExecuteReader), sau đó đối với mỗi hàng trong trình đọc đó, hãy thực hiện một lệnh khác (với ExecuteNonQuery). Trong trường hợp này tốt hơn là tôi sử dụng MultipleActiveResultSets=Truetrên kết nối của mình hay sử dụng nhiều kết nối?

Câu trả lời:


98

Nhiều Bộ Kết quả Hoạt động (MARS) đã được thêm đặc biệt cho loại hoạt động này để bạn không phải mở hai kết nối cùng một lúc để có thể đọc từ một SqlDataReader VÀ thực thi các lô bổ sung.

MARS tương thích với SQL Server 2005 trở lên. Để trích dẫn từ tài liệu MSDN:

Trước khi giới thiệu Nhiều Bộ Kết quả Hoạt động (MARS), các nhà phát triển phải sử dụng nhiều kết nối hoặc con trỏ phía máy chủ để giải quyết các tình huống nhất định.

Để biết thêm thông tin, hãy xem:

Thư viện MSDN - Tổng quan về MARS

Ví dụ đã làm việc đọc và cập nhật dữ liệu:

Thư viện MSDN - Thao tác Dữ liệu (MARS) cuộn xuống 'Đọc và Cập nhật Dữ liệu với MARS'


21

Đây là lý do tôi biết lý do MARS được thêm vào, vì vậy tôi nghĩ bạn nên sử dụng nó.


0

Cách tốt nhất để kiểm tra điều này là kích hoạt SQLServer Profiler và xem điều gì thực sự xảy ra ở phía máy chủ.

Tôi đoán rằng nó sẽ không tốt hơn vì bạn đang sử dụng ExecuteNonQuery (). Vì vậy, trên thực tế, bạn không làm việc với nhiều kết quả.


6
Đó là những gì tôi nghĩ khi viết mã, nhưng nếu tôi không có MultipleActiveResultSets = True thì tôi vẫn nhận được thông báo "Đã có một DataReader đang mở được liên kết với Lệnh này. Lệnh này phải được đóng trước." ngoại lệ trên ExecuteNonQuery.
Sprintstar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.