2012-06-11 35 views
5

Tôi sử dụng một quá trình không đồng bộ để truy xuất dữ liệu từ một truy vấn SQL đang chạy dài. Quá trình gọi thủ tục được lưu trữ thông qua phương thức SqlCommand.BeginExecuteReader().Gracefully chấm dứt truy vấn SQL Server chạy dài từ ADO.NET

Đôi khi, tôi muốn đóng quá trình của mình và chấm dứt hiệu quả mọi truy vấn đang chạy.

Sau một số thử nghiệm, có vẻ như gọi số SqlConnection.Close() là đủ. Để có biện pháp tốt, tôi cũng gọi rõ ràng SqlConnection.Dispose().

Khi chạy một dấu vết qua SQL Server Profiler, nó xuất hiện như thể truy vấn được kết thúc một cách duyên dáng như tôi nhìn thấy một SQL:BatchStarting theo sau là một SQL:BatchCompleted sau khi gọi Close().

Có ai vui lòng xác nhận xem việc đóng kết nối có phải là tất cả những gì được yêu cầu không?

Trả lời

2

Gọi Đóng là đủ, chỉ là một vài nhận xét:

Trước hết hãy đảm bảo bạn viết phương pháp Đóng bạn bên trong khối finally để bảo đảm xử lý ngoại lệ chính xác.

Ngoài ra, bạn không cần phải gọi cả hai phương thức SqlConnection.Close và SqlConnection.Dispose vì cả hai đều làm như vậy. Phương thức vứt bỏ được thêm vào để thực hiện mẫu IDisposable và phương thức này gọi nội bộ phương thức SqlConnection.Close, có tên tự nhiên hơn, vì chúng ta đóng các kết nối, nhưng không loại bỏ chúng :)

Nếu bạn đang sử dụng DataReader thì bạn phải đóng nó cũng như mỗi lần sau khi bạn muốn sử dụng kết nối cho mục đích khác.

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