/// <summary> /// 装载数据到DataTable,此过程为: /// 1.根据物理表的列定义创建DataTable构架 /// 2.从传入的列定义哈希表的值拼接sql,之后从源表中查询构造成SqlDataReader /// 3.调用外部服务获得目标表的数据并添加到DataTable,这里的外部服务 /// 需要SqlDataReader为参数,返回值填在一个在本类创建的DataRow对象中. /// 其中1,2步骤由_columnInfoService来完成 /// </summary> public void LoadDataToDataTable( ILevelExpandTempDBGetDataService exteralService) { DataTable dt = this._columnInfoService.DataTableInMemory; SqlDataReader reader = this.GetReaderForExteralService(); while (reader.Read()) { DataRow dr = dt.NewRow(); dt.Rows.Add(dr); // 调用外部服务获取实际数据 try { exteralService.GetData( this._columnInfoService.BasicColumnInfo, reader, dr); } catch (Exception e) { throw new TempDBServiceException(e, "调用外部服务以获得级次展开信息时发生错误"); } } }
/// <summary> /// 构造函数。此类将在ReportDataFacade中创建并使用 /// </summary> /// <param name="rdf"> /// ReportDataFacade类,主要为了使用其中的TempDBCnnString /// </param> /// <param name="columnInfo"> /// 目标表的列信息,其为一个哈希表: /// 1.键为目标表的列名称; /// 2.值为映射到源表中字段名称. /// 这两部分都将作为目标表中的字段 /// </param> /// <param name="sourceTableName">源表的名称</param> /// <param name="destTableName">目标表的名称</param> /// /// <param name="exteralService">计算级次展开信息的服务对象</param> public LevelExpandTempDBManager( ReportDataFacade rdf, Hashtable columnInfo, string sourceTableName, string destTableName, ILevelExpandTempDBGetDataService exteralService) { this._reportDataFacade = rdf; this._destTableName = destTableName; this._exteralService = exteralService; this.Check(columnInfo, sourceTableName); this._tempdbCnnString = this._reportDataFacade._U8LoginInfor.TempDBCnnString; this._columnInfoService = new LevelExpandTempDBHashTableToColumnService( columnInfo, sourceTableName, destTableName); }