Avatar billede podenphant Nybegynder
03. maj 2005 - 17:49 Der er 6 kommentarer og
1 løsning

iDatareader eof

Hejsa,

Jeg vil gerne checke om en Idatareader er tom
Hvis jeg foretager en Read() skippes det første element når jeg bagefter looper igennem iDatareaderen.

Altså ... hvordan checker jeg om idatareaderen er tom???

//poden
Avatar billede nielle Nybegynder
03. maj 2005 - 18:21 #1
Jeg ved ikke hvorfor IDataReader ikke har HasRows, men det har de tre afledte:

OleDbDataReader Reader1;
if (Reader1.HasRows) Console.WriteLine("Reader1 har rækker");

OdbcDataReader Reader2;
if (Reader2.HasRows) Console.WriteLine("Reader2 har rækker");

SqlDataReader Reader3;
if (Reader3.HasRows) Console.WriteLine("Reader3 har rækker");
Avatar billede nielle Nybegynder
03. maj 2005 - 18:31 #2
Og hvis du *vil* bruge IDataReader, kan du jo altid lave det som en flag-løsning:

IDataReader Reader = Cmd.ExecuteReader();

bool HasRows = false;  // Vi antager at der ikke er nogen rækker.
while (Reader.Read())
{
    if (!HasRows)
    {
        // Der var poster ... ergo skal vi nu gøre noget specielt
        // som vi ikke ville gøre hvis der ikke var poster:

        /* ... Kode som initialisere et eller andet ... */

        HasRows = true;
    }

    // Gør noget med data.
    Console.WriteLine(Reader.GetValue(0));
}
Reader.Close();

if (!HasRows)
{
    // Der var faktisk ingen rækker ... ergo skal vi nu gøre noget
    // specielt som vi ikke ville gøre hvis der var poster:

    Console.WriteLine("Der var ingen poster i tabellen.");
}
Avatar billede arne_v Ekspert
03. maj 2005 - 18:32 #3
Hvis du ved at du kun får en række så:

if(rdr.Read())
{
    iv = (int)rdr[0];
    sv = (string)rdr[1];
    ...
}
else
{
    // der var ingen rækker
}

hvis du skal hente flere rækker så må du:

somerows = false;
while(rdr.Read())
{
    iv = (int)rdr[0];
    sv = (string)rdr[1];
    ...
    somerows = true;
}
if(!somerows) {
    // der var ingen rækker
}
Avatar billede arne_v Ekspert
03. maj 2005 - 18:32 #4
nå - too late
Avatar billede burningice Nybegynder
03. maj 2005 - 23:01 #5
ang. det med at readeren skipper den første record kan også klares på denne måde:

if (reader.Read()) {
  do {
      // gør noget
  } while reader.Read();
} else {
  // readeren var tom
}
Avatar billede nielle Nybegynder
09. maj 2005 - 10:21 #6
Lukketid?
Avatar billede podenphant Nybegynder
09. maj 2005 - 15:11 #7
Jeps lukker ... 1000 tak for kommentarerne
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester