1
ADO는 내부적으로 connection pooling을 하고 있기 때문에 CAdoConnection 객체를 1번만 만들고 계속 사용하지 않으셔도 됩니다. 코드 스니펫처럼 매 DB 요청마다 CAdoConnection 객체를 생성하고, 사용 완료 후 RAII에 의해 처리되도록 하여도 성능 상 문제가 없습니다.
이렇게 매 요청마다 새 객체로 Open 하면 DB와의 연결이 안될 때 Open에서 Proud::AdoException이 발생하게 됩니다. 이러한 방법으로 IsOpened를 이용하시지 않고도 DB와의 연결 해지를 감지하실 수 있습니다. DB와의 연결이 끊겼는데 IsOpened가 true인 문제는 CAdoConnection::IsOpend()의 구현이 다음과 같은데요.
이 함수 body의 ObjectStaetEnum enum인 adStateClosed와 dll property reference인 State 모두 windows server 2003 r2 standard x64를 기준으로 msado15.tlh 에 구현된 것들로 최신 윈도우 또는 윈도우 서버와 맞지 않는 부분이 있을 수 있습니다. msado15.tlh 는 프라우드넷 유저 분들께 제공해 드리는 파일로서 설치 경로내 include/x64 폴더에서 확인하실 수 있습니다. 다만 CAdoConnection.IsOpened 문제는 해결에 다소 시간이 걸릴 수 있으니, 앞서 말씀드린 다른 방법을 사용하시는 것을 권합니다.
2 CDbLogWriter의 New 함수를 보시면 두 번째 인자로 ILogWriterDelegate를 넘기는 것을 보실 수 있습니다. 이 ILogWriterDelegate를 상속받는 클래스를 구현하고 그 클래스의 객체를 New 함수로 등록하시면, 그 객체의 OnLogWriterException 콜백을 통해 CDbLogWriter의 각종 에러들을 일괄적으로 받으실 수 있습니다.