[C#.net] Dynamische array van object

Pagina: 1
Acties:

  • hornage
  • Registratie: November 2001
  • Laatst online: 11-05 11:42
Ik ben bezig met het maken van een website die zijn gegevens uit een access database haalt.
Ik heb alleen een probleem met queries. Als ik een query uitvoer koppel ik daar een OLEDbDataReader aan om dan rij per rij de uitvoer uit te lezen. Het probleem is dat ik dan per rij weer een tweetal extra queries wil doen. Dit is niet mogelijk met de OLEDbDataReader ism met de OLEDbConnection. Nu kwam ik samen met mijn projectgenoot op het idee om dan de uitvoer van de query in een 2 dimensionale array van object te zetten en die terug te geven. Nu stoten we alleen op een probleem bij het definieren van dit type. Hij wil van tevoren al weten hoeveel rijen de uitvoer krijgt. De DataReader weet dit van tevoren niet. Hier kom je pas achter als je door de query heenloopt. Weet iemand hoe ik dit op deze manier toch werkend kan krijgen?

Code zoals ik het nu heb: (Rdr heb ik public gedeclareerd, is dus OLEDbDataReader. Conn hetzelfde, is een OLEDbConnection.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public Object[][] Execute_Query(string Query)
{                       
  OleDbCommand Cmd = new OleDbCommand();
  Cmd.Connection = Conn;
  Cmd.CommandType = System.Data.CommandType.Text;
  Cmd.CommandText = Query;
  Rdr = Cmd.ExecuteReader(System.Data.CommandBehavior.Default);
  Object[,] tempAnswer = new Object[][]; //dit moet dus goed
  int row = 0;
  while (Rdr.Read())
  { 
    tempAnswer[row] = new Object[Rdr.FieldCount];
    Rdr.GetValues(tempAnswer[row]);
    row++;              
  }
  Rdr.Close();
  return tempAnswer;            
}

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:01

Janoz

Moderator Devschuur®

!litemod

Bij elk resultaat weer twee queries uit gaan voeren klinkt in mijn oren als een join die eigenlijk al in de eerste query zou moeten horen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • hornage
  • Registratie: November 2001
  • Laatst online: 11-05 11:42
klopt, ik zou het ook in sql op kunnen lossen. Het leek me alleen op deze manier leuker. Ik hou meer van zulke problemen oplossen in de code dan in sql.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

hornage schreef op 20 mei 2004 @ 15:57:
klopt, ik zou het ook in sql op kunnen lossen. Het leek me alleen op deze manier leuker. Ik hou meer van zulke problemen oplossen in de code dan in sql.
8)7

Zou het je ook uitmaken als daardoor je applicatie minder stabiel wordt en in ieder geval een stuk trager?

Maar goed; maak anders een eigen class aan, dump deze in een arraylist en ga hier mee aan de gang.

[ Voor 13% gewijzigd door gorgi_19 op 20-05-2004 16:00 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • hornage
  • Registratie: November 2001
  • Laatst online: 11-05 11:42
ok, gorgi_19, je kan wel gelijk hebben, maar hier kunnen we een andere keer over discussieren. Ik ben eigenlijk benieuwd hoe ik dit oplos.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

hornage schreef op 20 mei 2004 @ 16:00:
ok, gorgi_19, je kan wel gelijk hebben, maar hier kunnen we een andere keer over discussieren. Ik ben eigenlijk benieuwd hoe ik dit oplos.
Hier kom je pas achter als je door de query heenloopt. Weet iemand hoe ik dit op deze manier toch werkend kan krijgen?
Als je het toch op die manier wilt, voer je toch eerst een count uit mbv die query? Weet je gelijk hoeveel rijen / records je terugkrijgt. Andere optie is om een dataset / datatable te vullen; dan kan je de rows collectie uitlezen.

[ Voor 25% gewijzigd door gorgi_19 op 20-05-2004 16:04 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • hornage
  • Registratie: November 2001
  • Laatst online: 11-05 11:42
ow, edit nog niet gelezen. DataSet... eens kijken hoe dat werkt.

[ Voor 84% gewijzigd door hornage op 20-05-2004 16:05 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

hornage schreef op 20 mei 2004 @ 16:04:
had ik ook aan gedacht. Alleen dat leek me dus geen nette manier. Eerst een query uitvoeren om een count te krijgen en dan weer eentje om het resultaat te krijgen. Moet toch wel kunnen zo?
Is het ook niet, dat heb ik niet beweerd. Alleen jouw oplossing zonder joins is ook niet netjes, dus ik zie niet in waarom de rest dat opeens wel moet zijn?

Derde optie heb ik zelf ook al gegeven:
Maar goed; maak anders een eigen class aan, dump deze in een arraylist en ga hier mee aan de gang.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

hornage schreef op 20 mei 2004 @ 16:00:
ok, gorgi_19, je kan wel gelijk hebben, maar hier kunnen we een andere keer over discussieren. Ik ben eigenlijk benieuwd hoe ik dit oplos.
Nou nee, je bent gewoon een normaal alledaags probleem met een simpele overheldere oplossing op een volstrekt idiote manier aan het oplossen en daarmee onze en je eigen tijd aan het verspillen door een manier feitelijk uit te zoeken die je later in het 'echte leven' op ontslag op staande voet zou komen te staan onder een enigszins functionerende manager. Ergo: join.

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:25
Als je dat wilt oplossen in de code ga je gewoon een veel tragere applicatie hebben dan als je het door de DB al laat uitvoeren.
Reken maar eens uit: je haalt n records op, en per record ga je dan nog eens 1 of 2 queries doen. 8)7
Maar goed, jij je zin.
Ik zou ook geen DataReader gebruiken in m'n web-app zelf. Een datareader mag imo niet buiten de data access layer voorkomen.

Je doet gewoon één query waarmee je alle gegevens ophaalt (met een JOIN dus), je 'wrapt' ieder record in een object van een custom class en voegt ieder object toe aan een arraylist.
Als je dan perse een 'gewone' array wilt hebben, dan kan je eens kijken naar de ToArray() method:

code:
1
(MyClass)myArrayList.ToArray (typeof(MyClass))

https://fgheysels.github.io/

Pagina: 1