Ejemplo n.º 1
0
        /// <summary>
        /// 지정된 DataAdapter를 통해 얻은 정보를 DataSet으로 빌드한다.
        /// </summary>
        /// <param name="adapter">DataAdapter</param>
        /// <param name="tableName">Table name</param>
        /// <param name="targetDataSet">저장할 Dataset</param>
        /// <param name="firstResult">첫번째 레코드의 인덱스 (0부터 시작)</param>
        /// <param name="maxResults">최대 레코드 수 (0 이면 무시하고, 마지막 레코드까지 가져온다</param>
        public virtual void LoadDataSet(DbDataAdapter adapter, string tableName, DataSet targetDataSet,
                                        int firstResult = 0, int maxResults = 0) {
            adapter.ShouldNotBeNull("adapter");
            targetDataSet.ShouldNotBeNull("targetDataSet");
            Guard.Assert(adapter.SelectCommand != null, "adapter.SelectCommand is null.");

            if(IsDebugEnabled)
                log.Debug(
                    "DataAdatpter를 이용하여 정보를 DataSet에 로드합니다...  adapter.SelectCommand=[{0}], tableName=[{1}], firstResult=[{2}], maxResults=[{3}]",
                    adapter.SelectCommand.CommandText, tableName, firstResult, maxResults);

            var resultCount = 0;
            var adoAdapter = new AdoDataAdapter(adapter);

            IDataReader reader = null;
            try {
                reader = ExecuteReaderInternal(adapter.SelectCommand);
                do {
                    var name = tableName.IsWhiteSpace() ? AdoTool.DefaultTableName + ++resultCount : tableName;

                    adoAdapter.Fill(targetDataSet, name, reader, firstResult, maxResults);
                } while(!reader.IsClosed && reader.NextResult());
            }
            catch(Exception ex) {
                if(log.IsErrorEnabled)
                    log.ErrorException("DataReader로부터 Data를 로드하는데 실패했습니다.", ex);
            }
            finally {
                if(reader != null)
                    reader.Dispose();

                //! 이거 하면 안된다!!! 호출한 놈이 해야한다.
                // adoAdapter.Dispose();
            }
        }