我原來制作水晶報表時,是使用的DataSet,將一個xml文件先load到DataSet中,然后設置報表的數據源為這個DataSet,但是如果這個xml文件過大的話(近300M), memory占用太大了現在改成:數據放在數據庫中,表結構和xml文件中的表結構是一樣的,使用DataReader來讀取數據,并設置報表的數據源為DataReader,請問:這樣是否行得通?

解决方案 »

  1.   

    为每个xml文件创建XMLSchema1.xsd,dataset先加载xsd文件,然后在加载xml,可提高速度
    ds.ReadXmlSchema();
    ds.ReadXml();
      

  2.   

    Converts a SqlDataReader to a DataSet
    只希望對你有幫助
    ///    <summary>
    ///    Converts a SqlDataReader to a DataSet
    ///    http://authors.aspalliance.com/stevesmith/articles/convertReadertoSet.asp
    ///    <param name='reader'>
    /// SqlDataReader to convert.</param>
    ///    <returns>
    /// DataSet filled with the contents of the reader.</returns>
    ///    </summary>
    public static DataSet convertDataReaderToDataSet(SqlDataReader reader)
    {
    DataSet dataSet = new DataSet();
    do
    {
    // Create new data table DataTable schemaTable = reader.GetSchemaTable();
    DataTable dataTable = new DataTable(); if ( schemaTable != null )
    {
    // A query returning records was executed for ( int i = 0; i < schemaTable.Rows.Count; i++ )
    {
    DataRow dataRow = schemaTable.Rows[ i ];
    // Create a column name that is unique in the data table
    string columnName = ( string )dataRow[ "ColumnName" ]; //+ "<C" + i + "/>";
    // Add the column definition to the data table
    DataColumn column = new DataColumn( columnName, ( Type )dataRow[ "DataType" ] );
    dataTable.Columns.Add( column );
    } dataSet.Tables.Add( dataTable ); // Fill the data table we just created while ( reader.Read() )
    {
    DataRow dataRow = dataTable.NewRow(); for ( int i = 0; i < reader.FieldCount; i++ )
    dataRow[ i ] = reader.GetValue( i ); dataTable.Rows.Add( dataRow );
    }
    }
    else
    {
    // No records were returned DataColumn column = new DataColumn("RowsAffected");
    dataTable.Columns.Add(column);
    dataSet.Tables.Add( dataTable );
    DataRow dataRow = dataTable.NewRow();
    dataRow[0] = reader.RecordsAffected;
    dataTable.Rows.Add( dataRow );
    }
    }
    while ( reader.NextResult() );

    //------------------------------
    reader.Close();//自己加的
    //------------------------------ return dataSet;
    }
      

  3.   

    哪位用c#做过window程序? 
    我在代码中,使用完数据库后,写了connection.close()
    但在oracle中查看,连接并没有关闭,当我关闭窗口以后,连接才关闭,为什么?