Results 1 to 4 of 4

Thread: BdpDataReader.RecordCount?

  1. #1
    Space Agent
    Join Date
    Jul 2005
    Location
    Groningen
    Posts
    34

    BdpDataReader.RecordCount?

    Hoi,

    Ik ben sinds kort bezig om met C# een webservice te bouwen. Dit gaat op zich heel soepel. De webservice controleert aan de hand van een aantal gegevens of iemand op een bepaalde manier is verzekerd (COV/Vecozo voor de kenners ).

    Mijn vraag gaat over het BdpDataReader object. Meer specifiek over hoe je kan constateren of een query resultaten heeft opgeleverd. Het standaard voorbeeld uit de help ziet er alsvolgt uit:

    Code:
    public static void ExecuteCommand ( BdpCommand Comm ) 
       {
         Comm.CommandText  =  " SELECT * FROM EMPLOYEE";
          Comm.Prepare();      
          BdpDataReader Reader = Comm.ExecuteReader();
          if ( Reader != null )
          {
             while (Reader.Read())
             {
                ShowData(Reader);                          
             }
             Reader.Close();
          }
          Comm.Close();
       }
    De inhoud van de ShowData functie is in dit verband niet van belang, dus die heb ik maar weggelaten. Waar het me nu om gaat is hoe ik kan bepalen of de query iets opgeleverd heeft.

    Wat ik tot nu toe heb vastgesteld:

    - Het Reader object zelf heeft, voor zover ik heb kunnen ontdekken, geen property die aangeeft of er records in de resultset zitten.
    - De controle of de Reader gelijk is aan Null is in mijn beleving enkel van belang wanneer er bij het uitvoeren van de query iets mis is gegaan. Het is dus niet zo dat de Reader null is wanneer de query geen resultaat oplevert.
    - Het resultaat van de query is, om het in Delphi termen te zeggen, unidirectional. Ik kan dus niet even kijken of er records aanwezig zijn door het eerste record te lezen en dan weer van voren te beginnen (sowieso geen ideale oplossing).

    Wat ik nog als oplossingen zie:

    - Ik zou zelf een teller bij kunnen gaan houden binnen de Read() lus (hele primitieve oplossing).
    - Ik kan van al m'n queries een sql 'count()' variant maken (onderhouds nachtmerrie).

    Afsluitend kan ik me haast niet voorstellen dat er niet al iets is om deze controle uit te voeren. Heb enkel een beetje hulp nodig het te vinden. Help?

    Grtz, Gerben
    Post early, post often.

  2. #2
    SillyMember
    Join Date
    May 2003
    Location
    Gent
    Posts
    7,725
    Ik gebruik zelf geen Bdp , maar de BdpDataReader implementeert gewoon de IDataReader interface, en die heeft geen properties/method's daarvoor gedefiniëerd. Daarentegen hebben de implementors zoals SQLDataReader, OleDbDataReader, OdbcDataReader, OracleDataReader (uitzondering is de SqlCeDataReader) allemaal wel een property HasRows (Boolean) die aangeeft of er rijen zijn.
    Voor andere dan SELECT statements kan je eventueel RecordsAffected property gebruiken (zie echter zeker de help voor correct gebruik).

    Noteer ook dat in ADO.NET 2.0 de DataReaders afgeleid zijn van de nieuwe klasse System.Data.Common.DbDataReader (en die heeft die property dus wel). Ik weet niet of ze bij Borland zinnens zijn hun BdpDataReader ook te laten erven van deze klasse.

    Beste oplossing voorlopig lijkt me een tellertje te laten meelopen (of een vlagje zetten bij de eerste read, als je enkel wil weten of de resultset al dan niet leeg is).
    All methodologies are based on fear. -- Kent Beck.

  3. #3
    Ik denk dat de reader echt is bedoelt om te lezen en daarom zo kaal en klein mogelijk is gehouden. Je leest je data in en pompt die ergens in (DataSet, Collection, ...) en gaat de data daarvandaan verwerken. Dat ljikt me een logische verklaring voor het "gemis" aan een HasRows.

    Neemt niet weg dat het soms wel handig was geweest....
    Marcel

  4. #4
    Bob Swart drbob42's Avatar
    Join Date
    May 2004
    Location
    Helmond Brandevoort
    Posts
    514
    Stop het resultaat in een ArrayList, dan hoef je ook van te voren niet te weten hoeveel het er zijn.
    Groetjes,
    Bob Swart

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •