직접 실행 창과 NUnit을 위한 유틸리티 – IDataReader 뷰어

IDataReader 인터페이스는 Database Command 객체로부터 데이터 결과 집합을 반환받을 때 주로 사용하는 ExecuteReader 함수의 결과 객체이다. 하지만 이 객체는 “커서”의 개념을 사용하고 있어서 디버거에서 사용하기가 매우 불편하다. 내용을 한꺼번에 살펴볼 수 있는 방법이 없어서 디버거나 NUnit에서 불편했던 적이 많다. 이런 점을 해결하기 위해서 개인적으로 IDataReader 뷰어 폼을 만들어보았다. 참고로 이것은 Windows Forms를 위한 것이다.



public partial class DataReaderViewer : Form
    {
        public DataReaderViewer()
            : this(null)
        {
        }


        public DataReaderViewer(IDataReader oReader)
        {
            this.m_oReader = oReader;
            this.InitializeComponent();
        }


        private IDataReader m_oReader;


        private void DataReaderViewer_Load(object sender, EventArgs e)
        {
            this.RefreshDataView();
        }


        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public IDataReader Reader
        {
            get { return this.m_oReader; }
            set
            {
                this.m_oReader = value;
                this.RefreshDataView();
            }
        }


        public bool RefreshDataView()
        {
            if (this.m_oReader != null && !this.m_oReader.IsClosed)
            {
                DataTable oTable = new DataTable();
                oTable.Load(this.m_oReader);
                this.oViewer.DataSource = oTable;
                return true;
            }


            return false;
        }


        public static DialogResult ShowViewer(IDataReader oReader)
        {
            return (new DataReaderViewer(oReader)).ShowDialog();
        }
    }


위의 코드에서 oViewer라고 하는 이름의 컨트롤을 추가하여 디자인하는 것은 실제로 적용할 때의 몫이 되겠다. 하지만 개략적인 원리는 간단하며, 디버거에서 사용하기 편리하게 하기 위하여 ShowViewer라고 하는 정적 함수를 두었다. 또한, 필요하다면 네임스페이스를 따로 두지는 말자. 직접 실행창이나 디버거에서 네임스페이스를 인식할 수 업는 상황도 자주 오기 때문이다.

댓글 남기기