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

posted on 2006-04-05 16:41  王熠  阅读(787)  评论(0)    收藏  举报