Vấn đề là, vì một số lý do, DataReader của bạn không bị đóng. Một ngoại lệ? Người dùng phương pháp không nhớ đã đóng DataReader?
Một hàm trả về một DataReader được sử dụng bên ngoài phần thân của nó sẽ khiến nó có trách nhiệm đóng nó với mã bên ngoài, vì vậy không có gì đảm bảo rằng Reader sẽ bị đóng. Nếu bạn không đóng trình đọc, bạn không thể sử dụng lại kết nối mà nó đã được mở.
Vì vậy, trả lại DataReader từ một hàm là một ý tưởng rất tồi!
Bạn có thể xem toàn bộ cuộc thảo luận về chủ đề này tại đây .
Tìm cách sử dụng của chức năng này (GetDataReader
), và kiểm tra xem có đảm bảo rằng đầu đọc đang được đóng không. Và, quan trọng nhất, không có khả năng mã này nhập lại và sử dụng cùng một bộ sưu tập để mở một DataReader mới trước khi cái đầu tiên bị đóng. (Đừng để bị đánh lừa bởi CommandBehavior.CloseConnection. Điều này chỉ quan tâm đến việc đóng kết nối khi DataReader bị đóng ... chỉ khi bạn không đóng nó)