[ASP.NET]Datareader recordcount + repeater

Pagina: 1
Acties:

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 17:25

BlackBurn

One Ring To Rule Them All

Topicstarter
Ik heb een pagina waarin een aantal producten worden getoond aan de hand van een selectie die gebruikers opgeven, heb hier gekozen voor een OleDBDataReader, omdat er verder niks naar de database hoeft te worden geschreven, tot zover werkt alles perfect.

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub LstHoutdikte_SelectedIndexChanged(sender As Object, e As EventArgs)
    
     Dim cnnAcces As OleDBConnection
     cnnAcces= new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataS ource=c:\inetpub\wwwroot\bekkers\bekkers.mdb")
     cnnAcces.Open()
    
     Dim strSQL As String
    
     If LstHoutDikte.SelectedIndex=0 Then
       strSQL= "SELECT * FROM tbluniverso"
     End If
       
        <knip stukje weg van de select zooi)
  
     Dim cmdSelect As New OleDbCommand(strSQL, cnnAcces)
   
     Dim drUniverso as OleDbDataReader
     drUniverso= cmdSelect.ExecuteReader()

     RepSelection.DataSource= drUniverso
     RepSelection.DataBind()
End sub


Maar nu leek het me wel leuk, als mensen konden zien, hoeveel "records" eraan hun verzoek voldeden, nu kwam ik er al vrij snel acher dat OleDbDatareader geen Recordcount had, maar na een beetje zoeken op google vond ik de volgende code.

ASP:
1
2
3
4
5
Dim intRecCount As Integer
intRecCount= 0
While drUniverso.Read()
  intRecCount= intRecCount+1
End While


Maar waar moet ik deze code plaatsen, als ik de code plaats tussen
drUniverso= cmdSelect.ExecuteReader()

RepSelection.DataSource= drUniverso
Dan word er niks meer geselecteerd en verschijnen er geen producten meer op me scherm, dus dacht ik laat ik de code naar het einde verplaatsen en onder RepSelection.Databind() proppen, maar helaas intRecCount bleef op 0 staan, nu heb ik wel een vermoeden waar dit doorkomt en ik denk dat het komt, doordat de datareader de records maar een keer doorloopt en dit doet als, deze gekoppeld wordt aan de repeater, of zit ik hier verkeerd?

Nu mijn vraag, waar zit de fout en hoe dit het makkelijkst op te lossen?

If it is broken, fix it. If it ain't broken, make it better!


  • Buzzman
  • Registratie: Juni 2000
  • Niet online
Een makkelijke manier is om "SELECT count(*) FROM tbluniverso" te doen :)

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 17:25

BlackBurn

One Ring To Rule Them All

Topicstarter
Buzzman schreef op 05 February 2003 @ 19:01:
Een makkelijke manier is om "SELECT count(*) FROM tbluniverso" te doen :)
Hier had ik zelf eigenlijk ook aan zitten denken, dit zou inderdaad een makkelijke manier zijn, maar zoals ik hierboven beschrijf zou het toch ook moeten werken?
en dan hoef ik ook maar 1keer een select procedure te doen.

If it is broken, fix it. If it ain't broken, make it better!


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Je kunt natuurlijk ipv je DataReader rechtstreeks aan de datasource te hangen, door die datareader lopen en alles in een ArrayList zetten, en ondertussen ook tellen....

code:
1
2
3
4
5
6
7
8
9
10
int teller = 0;
while( drUniverso.Read() )
{

   anObject = new anObject ( drUniverso.GetInt32(0), drUniverso.GetString(1), .... );
   teller ++;
   anArrayList.Add (anObject);
}

rpUniverso.DataSource = anArrayList;


Of, ipv die teller kan je dan natuurlijk ook de Count() method van de arraylist gaan gebruiken.

https://fgheysels.github.io/


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Middels een DataAdapter in een DataTable laden, dan de Rows.Count uitlezen voor de aantal rijen. De DataReader is een object dat geen nut heeft, want er zijn altijd betere alternatieven.

edit:
DataRepeater moest natuurlijk zijn DataReader |:(

[ Voor 17% gewijzigd door EfBe op 06-02-2003 09:49 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Gewoon weer even de index van je datareader op het begin zetten ;-)

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Verwijderd schreef op 06 February 2003 @ 00:10:
Gewoon weer even de index van je datareader op het begin zetten ;-)


Een datareader is -zoals de topicstarter al aangaf- een read only en forward only 'cursor'.
Je kunt de pointer niet terug op het begin zetten, en hij heeft ook geen 'First()' method oid.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
EfBe schreef op 06 February 2003 @ 00:02:
De DataRepeater is een object dat geen nut heeft, want er zijn altijd betere alternatieven.


Bedoel je nu DataRepeater of heb je het over een DataReader ?

https://fgheysels.github.io/


  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 17:25

BlackBurn

One Ring To Rule Them All

Topicstarter
whoami schreef op 06 februari 2003 @ 08:37:

[...]


Bedoel je nu DataRepeater of heb je het over een DataReader ?
Zelfde vraag hier, een DataRepeater is in mijn ogen toch zeker wel handig, een datareader zal natuurlijk wel zijn voor en nadelen hebben, maar ik ben van mening, dat het toch een mooi en snel componentje is om data te lezen.

/offtopic vraagje
Een dataset houd deze nu wel continue verbinding met de DB, toch ook alleen als er een opdracht word gegeven :?

If it is broken, fix it. If it ain't broken, make it better!


  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 17:25

BlackBurn

One Ring To Rule Them All

Topicstarter
whoami schreef op 05 February 2003 @ 21:03:
Je kunt natuurlijk ipv je DataReader rechtstreeks aan de datasource te hangen, door die datareader lopen en alles in een ArrayList zetten, en ondertussen ook tellen....

code:
1
2
3
4
5
6
7
8
9
10
int teller = 0;
while( drUniverso.Read() )
{

   anObject = new anObject ( drUniverso.GetInt32(0), drUniverso.GetString(1), .... );
   teller ++;
   anArrayList.Add (anObject);
}

rpUniverso.DataSource = anArrayList;


Of, ipv die teller kan je dan natuurlijk ook de Count() method van de arraylist gaan gebruiken.
Dit is opzich wel een mooie methode, ga ik straks als ik thuiskom meteen proberen, het enigste nadeel is wel, dat je moet aangeven, met welk type veld je te maken hebt (drUniverso.GetInt32(0)) en het betreft hier ook zeker zo'n 30velden :(
Het is zeker niet mogelijk om de Datareader zelf te laten kijken met wat voor type veld je te maken hebt?

De veldnamen blijven neem ik aan hetzelfde, zodat ik niet de ItemTemplate hoef aan te passen? (Merk ik eigenlijk vanzelf wel, maar goed kan vanaf hier weinig doen ;()

If it is broken, fix it. If it ain't broken, make it better!


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
BlackBurn schreef op 06 February 2003 @ 08:59:
[...]

/offtopic vraagje
Een dataset houd deze nu wel continue verbinding met de DB, toch ook alleen als er een opdracht word gegeven :?


Een dataset is een 'off-line representatie van de databank', dus houdt ie de verbinding niet.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
BlackBurn schreef op 06 February 2003 @ 09:06:
[...]


Dit is opzich wel een mooie methode, ga ik straks als ik thuiskom meteen proberen, het enigste nadeel is wel, dat je moet aangeven, met welk type veld je te maken hebt (drUniverso.GetInt32(0)) en het betreft hier ook zeker zo'n 30velden :(
Het is zeker niet mogelijk om de Datareader zelf te laten kijken met wat voor type veld je te maken hebt?
Je kan de velden ook op een andere manier accessen:
code:
1
drUniverso["Veldnaam"];

of
code:
1
drUniverso[0]

Maar ik geloof dat je ze dan toch nog moet casten. (In C# althans, misschien dat VB.NET niet 'strong-typed' is, maar ik betwijfel het).
De veldnamen blijven neem ik aan hetzelfde, zodat ik niet de ItemTemplate hoef aan te passen? (Merk ik eigenlijk vanzelf wel, maar goed kan vanaf hier weinig doen ;()

De veldnamen blijven idd hetzelfde, de naam van de columns uit de databank.

Maar anders moet je ook maar eens naar het voorstel van EfBe kijken, om een DataSet of een DataTable te gebruiken.

https://fgheysels.github.io/


  • EfBe
  • Registratie: Januari 2000
  • Niet online
whoami schreef op 06 February 2003 @ 08:37:

[...]


Bedoel je nu DataRepeater of heb je het over een DataReader ?
Darn... datareader idd.

De enige plek waar je datareaders zou kunnen gebruiken is het direct koppelen van een datareader aan een repeater ;) Vandaar wellicht de mix-up. Wanneer je dat echter doet, vernaggel je wel je n-tier abstractie en dat lijkt me nooit de bedoeling, ook niet in kleine flutapps.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • smoove
  • Registratie: Juli 2000
  • Laatst online: 18-06 21:01
RepSelection.DataBind()

Dim intRecCount As Integer=RepSelection.Items.Count

---


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Smoove schreef op 06 February 2003 @ 10:48:
RepSelection.DataBind()

Dim intRecCount As Integer=RepSelection.Items.Count


Ja, en wat als je met paging werkt op die DataRepeater?

https://fgheysels.github.io/


  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 17:25

BlackBurn

One Ring To Rule Them All

Topicstarter
whoami schreef op 06 February 2003 @ 10:51:

[...]


Ja, en wat als je met paging werkt op die DataRepeater?
Op dit moment gebruik ik nog geen paging, dus als tussen-oplossing zou het wel werken, maar liever meteen een goede oplossing, want de database zal wel snel een stuk groter worden.

Ga straks thuis ook meteen even kijken naar het idee van EfBe.

If it is broken, fix it. If it ain't broken, make it better!


  • EfBe
  • Registratie: Januari 2000
  • Niet online
ALs je paging gebruikt is de dataadapter ideaal, want je kunt de startrij opgeven die je wilt hebben en het aantal rows. Niks geen geklungel met eigen loopjes en andere troep :)

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
EfBe schreef op 06 February 2003 @ 13:36:
ALs je paging gebruikt is de dataadapter ideaal, want je kunt de startrij opgeven die je wilt hebben en het aantal rows. Niks geen geklungel met eigen loopjes en andere troep :)


Hoe doe je dat dan?
Hoe kun je een DataAdapter laten zeggen hoeveel records er in een dataset oid zitten? Ik zie hier niet direct een property of een method van een dataAdapter die dat kan....

https://fgheysels.github.io/


  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 17:25

BlackBurn

One Ring To Rule Them All

Topicstarter
whoami schreef op 06 February 2003 @ 13:43:

[...]


Hoe doe je dat dan?
Hoe kun je een DataAdapter laten zeggen hoeveel records er in een dataset oid zitten? Ik zie hier niet direct een property of een method van een dataAdapter die dat kan....
Ben ik eigenlijk ook wel nieuwsgierig naar, heb nu namelijk de oplossing van EfBe (DataAdapter icm DataSet), dit werkt goed. Paging ga ik misschien ook nog wel proberen :)

If it is broken, fix it. If it ain't broken, make it better!

Pagina: 1