2009-02-04 24 views
60

Tôi có một số C# trong đó tôi tạo trình đọc trên kết nối (ExecuteReader), sau đó cho 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=True trên kết nối của mình hoặc sử dụng nhiều kết nối?MultipleActiveResultSets = Đúng hay nhiều kết nối?

Trả lời

71

Nhiều bộ kết quả hoạt động (MARS) được thêm cụ thể cho loại thao tác này để bạn không phải mở hai kết nối cùng một lúc để đọc từ SqlDataReader VÀ thực hiện các đợt 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 sự ra đời của Nhiều Kết quả Sets hoạt động (MARS), nhà phát triển đã phải sử dụng một trong hai nhiều kết nối hoặc con trỏ phía máy chủ để giải quyết tình huống nhất định.

Để biết thêm thông xem:

MSDN Library - MARS Overview

Làm việc dụ đọc và cập nhật dữ liệu:

MSDN Library - Manipulating Data (MARS) cuộn xuống 'Đọc và cập nhật dữ liệu với MARS'

+0

+1 để đề cập đến SQL Server 2005 trở lên – pilotcam

17

Điều này cũng giống như 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 là 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ả.

+5

Đó là những gì tôi nghĩ khi tôi viết mã, nhưng nếu tôi không có MultipleActiveResultSets = True thì tôi vẫn nhận được một "Đã có một DataReader mở được liên kết với Lệnh này phải được đóng trước tiên." ngoại lệ trên ExecuteNonQuery. – Sprintstar

Các vấn đề liên quan