[C#] Door datareader loopen werkt niet goed

Pagina: 1
Acties:

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
Hallo,

Ik wil graag door de resultaten van een stored proc heen lopen.
Ik stop deze resultaten in een datareader, nu wil ik deze in een (multiline) textbox stoppen. Hij laat alleen maar 1 record zien en niet 123 zoals er in zouden moeten zitten.

Het is vast heel simpel maar ik zie het ff niet wat ik fout doe.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 private SqlCommand executeProc(string procname)
    {
      
      SqlCommand sqlCommand = new SqlCommand(procname, openDB());
      sqlCommand.CommandTimeout = 60;
      sqlCommand.CommandType = CommandType.StoredProcedure;
      
      return sqlCommand;
    }

    private SqlConnection openDB()
    {
      SqlConnection sqlConnection = new SqlConnection("Server=XXX;Database=XXX;Uid=XXX;Pwd=XXX");
      sqlConnection.Open();
      return sqlConnection;
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
      storedproc = "br_getHoursRelman";
      SqlDataReader reader = executeProc(storedproc).ExecuteReader();
      

      while(reader.Read())
      {

        textBox1.Text=Convert.ToString(reader.GetInt32(0)+"\n");
      }


mocht iemand links hebben naar duidelijke tutorials enzo dan zijn die ook welkom natuurlijk!

[ Voor 3% gewijzigd door 4of9 op 03-12-2004 16:36 ]

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19-05 13:45

gorgi_19

Kruimeltjes zijn weer op :9

textBox1.Text=Convert.ToString(reader.GetInt32(0)+"\n");

Daar zit de fout
Je moet iets doen als:
textBox1.Text &= Convert.ToString(reader.GetInt32(0)+"\n");

geen ideen van de precieze syntax

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
och idd ff proberen...

Ik dacht dat ik met die "\n" naar de volgende regel ging.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Ehm, ja, je zet de waarden in een textvak, en je overschrijft iedere keer de vorige waarde.
Dat wil dus zeggen dat je enkel de laatste waarde zult zien.

Probeer het eens zo:
code:
1
2
3
4
while( reader.Read() )
{
   textBox1.Text += dr.GetInt32(0).ToString();
}

of
code:
1
2
3
4
while( reader.Read() )
{
  listBox1.Items.Add (reader.GetInt32(0).ToString());
}


Verder vind ik het ook geen goed idee om in een grote applicatie je Data Access in je form zelf te doen; maar goed. ....

Overleg ik eens wat met een collega, is die gorgi me voor. :(

[ Voor 22% gewijzigd door whoami op 03-12-2004 16:40 ]

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
4of9 schreef op vrijdag 03 december 2004 @ 16:39:
och idd ff proberen...

Ik dacht dat ik met die "\n" naar de volgende regel ging.
Dat doet hij inderdaad, maar je moet dan wel de multiline property van je textbox ingesteld hebben op true, en de waarden die er al in zitten niet overschrijven. :)

https://fgheysels.github.io/


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
ja daar ging het idd fout... alleen hoe ga ik nu naar de volgende regel :?

ff die listbox proberen.

is er een manier om snel het aantal records op te halen?

zoals in ado, recordcount oid?

[ Voor 32% gewijzigd door 4of9 op 03-12-2004 16:42 ]

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


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

curry684

left part of the evil twins

Je vergeet overigens je SqlConnection te sluiten, dus na enkele tientallen clicks is het gedaan met de pret.

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Je kan je aantal records tellen door een select count() te doen, en dan het resultaat op te vragen dmv de ExecuteScalar method van je SqlCommand toe te passen.
Ik denk niet dat de DataReader een property heeft die het aantal opgehaalde records toont, want die reader kan dat op het moment dat hij geopend werd niet weten.
Je kan natuurlijk wel al je data in een DataTable inladen (dmv een DataAdapter te gebruiken), en dan de Count property van de Rows prperty van die DataTable uitlezen.

https://fgheysels.github.io/


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
Scheelt een dataadapter niet te veel performance ten opzichte van een datareader?

Ik hoef namelijk de records maar 1x op te halen.

ps: close ook toegevoegd, thx voor de tip.

heb het nu in een listbox gegooid, maar in een multiline textbox komen alle resultaten achter elkaar, en een "\n" gaat niet naar de volgende line.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


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

curry684

left part of the evil twins

4of9 schreef op vrijdag 03 december 2004 @ 16:55:
Scheelt een dataadapter niet te veel performance ten opzichte van een datareader?

Ik hoef namelijk de records maar 1x op te halen.
Een datareader loopt sequentieel door de data. SqlDataAdapter.Fill(...) doet in de praktijk niets anders maar mikt het allemaal in een DataTable of DataSet. Het zal dus in beginsel even snel zijn :)
heb het nu in een listbox gegooid, maar in een multiline textbox komen alle resultaten achter elkaar, en een "\n" gaat niet naar de volgende line.
CrLf oftewel "\r\n" gebruiken onder Windows :)

Professionele website nodig?


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19-05 13:45

gorgi_19

Kruimeltjes zijn weer op :9

4of9 schreef op vrijdag 03 december 2004 @ 16:55:
Scheelt een dataadapter niet te veel performance ten opzichte van een datareader?

Ik hoef namelijk de records maar 1x op te halen.

ps: close ook toegevoegd, thx voor de tip.

heb het nu in een listbox gegooid, maar in een multiline textbox komen alle resultaten achter elkaar, en een "\n" gaat niet naar de volgende line.
Erhm.... Ik denk dat je je beter zorgen kan maken om andere zaken dan om dit kleine beetje performancewinst in deze situatie. Sowieso zijn datareaders eng; heel makkelijk hou je open connecties.
curry684 schreef op vrijdag 03 december 2004 @ 16:58:
[...]

Een datareader loopt sequentieel door de data. SqlDataAdapter.Fill(...) doet in de praktijk niets anders maar mikt het allemaal in een DataTable of DataSet. Het zal dus in beginsel even snel zijn :)
Waarbij je een beetje extra overhead zal hebben van de datatable, maar voor de meeste situaties verwaarloosbaar klein zijn. Tenzij je net als MS wil bewijzen dat .Net sneller is dan Java en Pet Shop gaat nabouwen :P
CrLf oftewel "\r\n" gebruiken onder Windows :)
Ik heb dan een voorkeur voor Environment.Newline :)

[ Voor 35% gewijzigd door gorgi_19 op 03-12-2004 17:00 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
thx voor alle tips en hulp!

nog 1 klein vraagje dan :o

hoe clear ik mijn listbox weer als ik 2x op de button click staan de results er 2x in (en dat moet niet :) )

thx again!

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19-05 13:45

gorgi_19

Kruimeltjes zijn weer op :9

4of9 schreef op vrijdag 03 december 2004 @ 17:08:
thx voor alle tips en hulp!

nog 1 klein vraagje dan :o

hoe clear ik mijn listbox weer als ik 2x op de button click staan de results er 2x in (en dat moet niet :) )

thx again!
Dat hangt er van af; web- of winforms?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
winforms...

Refresh en Update werkte niet (en clear bestaat niet)

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


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

curry684

left part of the evil twins

C#:
1
ListBox.Items.Clear()

Zelf een beetje in de help kijken mag ook wel hoor ;)

Professionele website nodig?


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
oh... niet gezien :|

thx...

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...

Pagina: 1