Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc
Titulní Blogy Fotky Soubory

Vítězslav Gazda

BoundaryDataReader

V .NET 2.0 lze naplnit tabulku přímo z readeru pomocí metody Load třídy DataTable, jenže nelze nastavit rozsah záznamů (startRecord, maxRecords) podobně jako to umožňuje metoda Fill třídy DbDataAdapter, od které dědí většina adaptérů (Sql, Oracle, OleDb, Odbc, atd.). Existuje však jedno docela jednoduché řešení. Spočívá v implementaci rozhraní IDataReader na vlastním readru, který pouze obalí původní reader, ale zpřístupní pouze zadaný rozsah záznamů stejným způsobem jako zmíněná metoda Fill. Všechny metody definované rozhraním IDataReader, které implementuje BoundaryDataReader, pouze zavolají původní reader, takže zde uvádím pouze tu nejpodstatnější metodu Read, která je ovšem rovněž velice jednoduchá.

public class BoundaryDataReader:IDataReader
{
 private IDataReader reader;
 private int startRecord;
 private int maxRecords;
 private int current = 0;

 public BoundaryDataReader(IDataReader reader,int startRecord,int maxRecords)
 {
  this.reader = reader;
  this.startRecord = startRecord;
  this.maxRecords = maxRecords;
 }

 public bool Read()
 {
  while (current < startRecord && reader.Read()) current++;
  bool result = (maxRecords < 0 || maxRecords > current - startRecord) && reader.Read();
  if (result) current++;
  return result;
 }

 ...
 ...
 ...
}

a takto lze potom do tabulky nahrát 50 záznamů od záznamu 100:

DataTable table = new DataTable();
table.Load(new BoundaryDataReader(command.ExecuteReader(),100,50))

Zveřejněno 21. července 2006 12:02 by viga
Vedeno pod:

Komentář

Žádné komentáře
Neregistrovaní uživatele nemužou přidávat komentáře.
Powered by Community Server (Personal Edition), by Telligent Systems
Vyvojar.cz na prodej!