Toon posts:

[vb.net/asp.net] gebruik van dbconnectie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb even een vraagje over het gebruikt van de database connectie. Hoe kan je die het beste gebruiken in een class waar meerdere functions gebruik maken van die connectie. Ik open de connectie steeds handmatig maar ik heb ook gelezen dat de connectie automatisch geopend en gesloten wordt bij een datareader.

Ik gebruik het nu alsvolgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class voorbeeldnaam
  private objConn As New OdbcConnection = New OdbcConnection( connstr )

  public function blabla() As ODBCDataReader
        Dim objCmd As New OdbcCommand("sqlquery", objConn)

        objConn.Open()
        Dim contentItems As OdbcDataReader = objCmd.ExecuteReader
        Return contentItems
        contentItems.Close()
        objConn.Close()
  end function

  public function blabla2() As ODBCDataReader
        Dim objCmd As New OdbcCommand("sqlquery", objConn)

        objConn.Open()
        Dim contentItems As OdbcDataReader = objCmd.ExecuteReader
        Return contentItems
        contentItems.Close()
        objConn.Close()
  end function
end class


dit is een soort pseudocode dus zeg niet dat ik wel de sql query niet klopt oid

gaat deze code werken of niet? en hoe kan je het best gebruik maken van de dbconnectie. Heb ook wel eens gezien dat ze die opslaan in een sessie.

[ Voor 6% gewijzigd door Verwijderd op 09-02-2005 10:41 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14:40

gorgi_19

Kruimeltjes zijn weer op :9

Nee, dat gaat niet. Je geeft een datareader terug, springt uit de functie, dus hij zal je connectie nooit gaan sluiten.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op woensdag 09 februari 2005 @ 10:40:
Nee, dat gaat niet. Je geeft een datareader terug, springt uit de functie, dus hij zal je connectie nooit gaan sluiten.
idd dat dacht ik ook al .. maar hoe moet je dat dan doen? datareader automatisch laten sluiten en niet handmatig?

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:29
Een datareader gaat een connectie niet automatisch openen of sluiten. Een DataAdapter kan dat wel.

Ik vind de manier waarop je die DataReader gebruikt niet goed, want je returned een DataReader. Een dataReader heeft een open connectie nodig, dus vanzodra jij die reader die je returned wilt gaan uitlezen, zal je een exceptie krijgen omdat je je connectie al gesloten hebt.
Als je je connectie openlaat, en je returned een reader, tja, dan ga je zelf op een bepaald moment die reader en de connectie moeten sluiten.
Hmm, zoals gorgi al zegt, zal de connectie en de reader nooit gesloten worden, omdat je daarvoor al uit de functie springt..... Ook niet goed trouwens.

het is beter dat je, ipv een reader, een collectie van objecten teruggeeft in die functie. Die collectie kan je vullen in je functie zelf door objecten eraan toe te voegen die je creeërt adhv de data die je terugkrijgt van de reader.

[ Voor 10% gewijzigd door whoami op 09-02-2005 10:43 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
een aparte class met de public variabelen en die vullen met de reader misschien? Dat je eerst de functie aanroept die de reader laat lopen en die de class vult met de gegevens en dan nav die class de variabelen gebruiken. dus:
code:
1
2
3
4
5
6
7
public class gegevens
  public strEEN, strTWEE, strDRIE as string
end class

public class voorbeeldnaam
  ... hier functies met de readers
end class

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Een datareader heeft een overload met een parameter 'behavior'. Als je een reader opent op de volgende manier:

code:
1
objCmd.ExecuteReader(CommandBehavior.CloseConnection)


dan kun je in de code die de DataReader ophaalt uit de functie, de datareader na gebruik sluiten met DataReader.Close en de datareader zal dan meteen zijn Connection sluiten.

Certified smart block developer op de agile darkchain stack. PM voor info.


Verwijderd

Topicstarter
@gunp01nt
ok ik zal het testen.

@algemeen
Eigenlijk was dit mn vraag niet. Ik was benieuwd hoe jullie het doen met de connecties en als jullie dingen willen ophalen zoals ik doe. Gebruik jullie allemaal data-adapters en datasets? Ik zie het nut eigenlijk niet er van in, maar misschien komt dat omdat ik nog niet echt een beeld heb van die datasets ed. En mn ADO.NET boek is ook allemaal zo lekker vaag .. helemaal geen praktische tips .. alleen de theorie ..

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Ik gebruik meestal een datareader en haal daar de informatie uit die ik nodig heb en zet die in een (arraylist van) object(en). Maar omdat ik in mijn applicaties altijd meerdere database systemen wil ondersteunen, heb ik een datahelper geschreven die de verschillende soorten database objecten abstraheert.

Mijn datalayer spreekt dan DataHelper.ExecuteReader aan, en mijn datahelper opent een connectie, command en datareader voor het geselecteerde DBMS. Daarbij wordt dus een datareader gereturned uit de functie ExecuteReader, die ik dus alsnog sluit in de datalayer-code dmv. het behavior wat ik hierboven noemde.

Certified smart block developer op de agile darkchain stack. PM voor info.


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:29
Verwijderd schreef op woensdag 09 februari 2005 @ 12:47:
Eigenlijk was dit mn vraag niet. Ik was benieuwd hoe jullie het doen met de connecties en als jullie dingen willen ophalen zoals ik doe.
Nee, ik heb een Data Access Laag die de data-adapter of reader gebruikt, een dataset vult, of een custom collectie met custom objecten vult, en die teruggeeft.

https://fgheysels.github.io/

Pagina: 1