[ADO.NET] Omgang met connecties

Pagina: 1
Acties:

  • Tanck
  • Registratie: Augustus 2004
  • Laatst online: 30-09-2025
Ben bezig met ADO.NET te verkennen.

voorheen heb ik voornamelijk in vb6 met MDAC/SQL databases benadert, hierbij open ik de database conn. bij het starten van mijn app. e sluit ik de conn. bij het afsluiten van mijn app.


Wij zitten echter voor een groot deel in de industrieele tak waarbij logging(interval van 1sec) een
veelgevraagde wens is(process values, statussen etc.)

Nu is mijn vraag hoe ik moet omgaan met de database connectie in ADO.NET. Ik ben voorbeelden tegengekomen waarbij voor elke query een nieuwe conn. wordt gemaakt.

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Een nieuwe connection maken voor elke query is in principe geen probleem. Het is dan wel het verstandigste dat je ervoor zorgt dat je connectionstring altijd hetzelfde is in verband met pooling.

Verder is je vraag op teveel manieren op te pakken. Belangrijke vraag is bijvoorbeeld of je een aparte data access laag gaat schrijven, of dat de code ergens in je applicatie tussen de businesslogica onder button1_click komt.

Bij een DAL zou je er bijvoorbeeld voor kunnen kiezen om een time-out op je connection te bouwen, zodat deze gesloten wordt wanneer deze langer dan 10 seconden niet gebruikt wordt. Wanneer de connection dan gebruikt wordt reset je de time-out. Als je een actie wil uitvoeren controleer je of de verbinding open staat, anders open je die.

De vraag is echter nogmaals: in wat voor omgeving gaat het draaien qua infrastructuur, wat voor database zit er achter, wat wordt er van het systeem verwacht, etc..

My personal website


  • Tanck
  • Registratie: Augustus 2004
  • Laatst online: 30-09-2025
De app. draait op Microsoft SQL Server, deze staat in de meeste gevallen lokaal. Er wordt gelogd met intervallen varieerend van 1 sec. to 1 min.

Verder wordt er met een andere appl. rapportages en grafieken weergegeven.

Verwijderd

Tanck schreef op dinsdag 29 maart 2005 @ 09:54:
Ben bezig met ADO.NET te verkennen.

voorheen heb ik voornamelijk in vb6 met MDAC/SQL databases benadert, hierbij open ik de database conn. bij het starten van mijn app. e sluit ik de conn. bij het afsluiten van mijn app.

Wij zitten echter voor een groot deel in de industrieele tak waarbij logging(interval van 1sec) een
veelgevraagde wens is(process values, statussen etc.)

Nu is mijn vraag hoe ik moet omgaan met de database connectie in ADO.NET.
Hetzelfde. Alleen heb je nu een beter framework.

Je hebt geen record sets meer beschikbaar in de volgende vorm:
rs!Veldnaam1
rs!Veldnaam2
Tanck schreef op dinsdag 29 maart 2005 @ 09:54:
Ik ben voorbeelden tegengekomen waarbij voor elke query een nieuwe conn. wordt gemaakt.
Voor veelvuldige selecteis/mutaties in de database is dit dus uit den boze, omdat dit ten koste gaat van de performance. Mits je natuurlijk niet langdurig een transactie open houdt.

De database heeft een functie CreateCommand() die je een DataCommand teruggeeft met de daarbijbehorende database connectie.

  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Verwijderd schreef op dinsdag 29 maart 2005 @ 18:44:

Voor veelvuldige selecteis/mutaties in de database is dit dus uit den boze, omdat dit ten koste gaat van de performance. Mits je natuurlijk niet langdurig een transactie open houdt.
Dat kan je niet zomaar zeggen.
Als er gebruik gemaakt wordt van connection-pooling, en als je na die query niet weet wanneer je de connectie nog eens nodig hebt, dan is het beter om je connectie te sluiten.

Als je echter, bv 2, 3, .... queries na elkaar doet, dan moet je je connectie pas sluiten als je al die queries gedaan hebt.

Als je een applicatie hebt, waar veel gebruikers tegelijk gebruik van maken, dan is het een crime om de connectie gedurende de ganse tijd van de applicatie open te houden. Het is veel schaalbaalder als je pas een connectie opent als je ze ook echt nodig hebt.

https://fgheysels.github.io/


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
http://msdn.microsoft.com...servernetdataprovider.asp

Als je met ado.net een connection closed, dan sluit je hem niet, maar return je de connectie naar de connectie-pool. Daar wordt dan bij een volgend request een reeds bestaande connectie uitgehaald.
Vereiste hiervoor is dat de connectiestring hetzelfde is.
De best practice is dan ook om zoveel mogelijk connecties te openen en de sluiten in je app. Daarmee wordt optimale pooling bereikt en worden de resources zo kort mogelijk gebruikt.

Let wel op dat je de connecties goed sluit (returned naar de pool). Je kan het aantal open connecties van een database meten met perfmon(.exe)

In bovenstaande link wordt alles uitgelegd door Bill Gates :)
Pagina: 1