저는 클라이언트가 특정 데이터 소스에서 데이터를 가져 오는 데 사용할 수있는 클래스를 생성해야합니다. 예를 들어, 메인 루틴 내가 데이터 액세스 응용 프로그램 블록이 작업을 수행 알고열려있는 DataReaders를 어떻게 추적해야합니까?
IDataReader GetDataReader(DbCommand command);
DataSet GetDataSet(DbCommand command);
될 것입니다하지만 난 내가 설명하지 않습니다 이유로 응용 프로그램 블록을 사용할 수 없습니다. 어쨌든, 나는 약간의 논리를 빌릴 계획이다.
그러나 내 작업의 또 다른 부분은 개방형 DataReaders를 추적하는 것입니다. 이는 모든 사람이 독자를 제대로 닫고 있는지 확인하기 위해서입니다. 내 계획은 GetDataReader 루틴이 호출 될 때마다 추가되는 DataReaders 컬렉션을이 새 클래스 안에 포함하는 것입니다. 앱 실행이 끝나면 코드는이 컬렉션을 거치며 경고가 아직 열려있는 각 리더의 파일에 기록됩니다.
그래서, 나는이 개 질문이 :
- 이 디자인 본질적 문제가 있나요?
- 어쨌든 DataReader에서 SQL 명령을 실행할 수 있습니까? 이렇게하면 닫히지 않은 독자 검색을 크게 단순화 할 수 있습니다. 또는이 정보를 얻기 위해 리더/명령 쌍을 저장해야합니까?
중복 : http://stackoverflow.com/questions/941126/how-to-manage-sqldatareaders-in-a-data-access-layer – scottm