我理解,我也用过类似的方法,要先将DataReader读音入DataTable中,再将表DataSet.Talbes.Add()到数据集中;
不过在类中返回数据读时,怎样关闭数据读和数据库连接呢?DataReader是连接状态使用的啊,下面是在类的方法中的代码(有省略):
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);是在关闭dr时才关闭连接,但怎样在类的实例中关闭dr呢?
/// <summary>
/// Converts a SqlDataReader to a DataSet
/// <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