Avatar billede mmbn Nybegynder
19. juli 2005 - 11:20 Der er 13 kommentarer og
1 løsning

Oracle Data Reader

Hvis jeg vil gennemløbe alle tabeller i en oracledatabase med "select * from tabelnavn" og gemme resultatet i en stringbuilder, hvad er så den bedste metode?  er kommet fra til noget lignende:
OracleDatareader oReader = cmd.executeReader(CommandBehavior.CloseConnection);
while(oReader.Read())
{
  while(count < oReader.FieldCount)
  {
  builder.Append(oReader.GetValue(count).ToString());
  }
}

er der nogen bedre metode og hvis ja hvilekn en?
Avatar billede mmbn Nybegynder
19. juli 2005 - 11:21 #1
jeg har count med for at vide hvilken kolonne jeg er i. skal bruge første kolonne fra hver tabel til noget skrivning til txt fil
Avatar billede mmbn Nybegynder
19. juli 2005 - 11:26 #2
med dette mener jeg
OracleDatareader oReader = cmd.executeReader(CommandBehavior.CloseConnection);
while(oReader.Read())
{
  while(count < oReader.FieldCount)
  {
  if(count == 0)
  {
      //gør noget
  }
  else
  {
      builder.Append(oReader.GetValue(count).ToString());
  }
  }
}
Avatar billede arne_v Ekspert
19. juli 2005 - 11:51 #3
hvis det absolut skal gemmes i en StringBuilder så er det jo nok måden - jeg ville bruge
en for løkke som inder løkke, men det er mere smag og behag
Avatar billede nielle Nybegynder
19. juli 2005 - 11:51 #4
Nej, det ser ganske fornuftigt ud - bortset fra at du får samlet alle dine poster i en lang gang pløre uden hverken mellemrum imellem de enkelte poster eller linjeskift imellem de enkelte rækker.

Dog kan du vinde lidt hastighed ved ikke ar spørge på:

while(count < oReader.FieldCount)

- for hvert gennemløb. Denne post ændre sig jo ikke.
Avatar billede nielle Nybegynder
19. juli 2005 - 11:56 #5
Efter som at det er en enkelt kolonne du skal have fat i (den med nummeret count), kan du spare en hel del ved at indrette din SQL derefter:

"SELECT dinKolonne FROM tabelnavn"

- i stedet for:

"SELECT * FROM tabelnavn"
Avatar billede nielle Nybegynder
19. juli 2005 - 11:57 #6
Bemærk: Valget af navnet "count" er måske en lille smule uheldigt valgt idet dette har en speciel betydning i forbindelse med SQL. Ikke at det vil resulterer i en fejl i dette tilfælde - allerhøjst en mulighed for misforståelser.
Avatar billede mmbn Nybegynder
19. juli 2005 - 12:18 #7
jeg skal bruge af oplsyningerne fra basen også ikke kun "count kolonnen" men til to forskellige ting. Alle posterne skal skrive i en lang pløre til en ark fil jvf en kravspecifikation jeg har. derfor bruges stringbuilder.
Avatar billede nielle Nybegynder
19. juli 2005 - 12:25 #8
Lige nu er det kun count kolonnen som du gemmer:

builder.Append(oReader.GetValue(count).ToString());

Når readeren er løbet til ende som har du vist ikke mulighed for at jøre den en gang til. Husk iøvrigt at kalde Close() på din reader, da du ellers kan komme ud for diverse ubehageligheder.
Avatar billede arne_v Ekspert
19. juli 2005 - 12:33 #9
nielle>

jeg tror at han har undladt en count=0 og count++ i det skitserede
Avatar billede arne_v Ekspert
19. juli 2005 - 12:33 #10
jeg har ihvertfald læst den inderste while løkke som værende en for løkke
Avatar billede mmbn Nybegynder
19. juli 2005 - 12:35 #11
jeg har lukket readet og hvergang jeg har tilføjet noget til builder så incrementeres count (count++).
indtil
if(count == oReader.FieldCount)
{
                                        count = 0;
                                        break;
}
Avatar billede arne_v Ekspert
19. juli 2005 - 14:49 #12
jeg mener stadig at en for løkke vil være nemmere at læse
Avatar billede nielle Nybegynder
12. august 2005 - 08:35 #13
Jeg er lidt usikker; Har du fået løst dit problem eller hvad?
Avatar billede mmbn Nybegynder
13. august 2005 - 15:17 #14
har lavet det helt om og fået valgt nogle specifikke select statements så det ikk bare er select * hver gang. Herefter bruger jeg dataAdapter.fill metoden. Med de størrelser databaser jeg skal have informationerne fra synes jeg at det kører hurtigere hvis man bruger dataAdapter kontra reader.
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