我原來制作水晶報表時,是使用的DataSet,將一個xml文件先load到DataSet中,然后設置報表的數據源為這個DataSet,但是如果這個xml文件過大的話(近300M), memory占用太大了現在改成:數據放在數據庫中,表結構和xml文件中的表結構是一樣的,使用DataReader來讀取數據,并設置報表的數據源為DataReader,請問:這樣是否行得通?
调试欢乐多
ds.ReadXmlSchema();
ds.ReadXml();
只希望對你有幫助
/// <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;
}
我在代码中,使用完数据库后,写了connection.close()
但在oracle中查看,连接并没有关闭,当我关闭窗口以后,连接才关闭,为什么?