/// <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(); } }