2010-09-28 36 views
9

Tôi có một ứng dụng sử dụng SqlConnection.ClearAllPools để đóng tất cả các kết nối trước khi xóa cơ sở dữ liệu.SqlConnection.ClearAllPools, những gì được xóa?

Có trường hợp kết nối vẫn còn ở đó. Kết nối này đã được tạo trong miền ứng dụng khác.

Tôi tự hỏi kết nối nào bị đóng bởi SqlConnection.ClearAllPools?

  • Chỉ các kết nối được mở bởi quy trình gọi (hoặc AppDomain)?
  • Tất cả các kết nối được mở bởi máy này?
  • ...?

Trả lời

9

Nó đóng tất cả các kết nối được mở bởi quá trình gọi. Nó làm trống tất cả các hồ bơi kết nối được ràng buộc với quá trình. Quote:

Nhóm kết nối và chuỗi kết nối đi đôi với nhau. Mỗi hồ bơi kết nối được kết hợp với một chuỗi kết nối riêng biệt và quá, nó là cụ thể cho ứng dụng. Đổi lại, ý nghĩa của nó là - một nhóm kết nối riêng biệt được duy trì cho mọi quy trình, miền ứng dụng và chuỗi kết nối riêng biệt.

+0

Cảm ơn. Tài liệu không rõ ràng về nó. Tôi biết có một hồ bơi cho mỗi cấu hình và mỗi ứng dụng. Nhưng ClearAllPools là số nhiều và nó xóa một số hồ bơi. Nhưng cái nào? Nó không thể dựa vào cấu hình, bởi vì nó là một phương thức tĩnh mà không có bất kỳ đối số nào. Nhưng liệu nó có phụ thuộc vào quy trình/miền ứng dụng không? –

+0

@Stefan, có tài liệu không rõ ràng về phương pháp này. Trong thực tế, có thể có nhiều hồ bơi cho mỗi miền ứng dụng nếu nó sử dụng các chuỗi kết nối khác nhau. Khi bạn chuyển một chuỗi kết nối tới 'SqlConnection' bên trong miền ứng dụng, kết nối này sẽ được rút ra từ nhóm được kết hợp với nhóm kết nối này hoặc một nhóm mới sẽ được tạo nếu nó không tồn tại. Đó là lý do tại sao cũng có phương thức 'SqlConnection.ClearPool' cho phép bạn xóa hồ bơi liên quan đến một kết nối đã cho. Vì vậy, về cơ bản hồ bơi là cho mỗi chuỗi kết nối/mỗi miền ứng dụng. –

+0

Chắc chắn, đó là phần tôi có thể tìm thấy trong tài liệu. Nhưng tôi không thể lấy được "phạm vi" của 'ClearAllPools' từ điều này. –

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