Avatar billede soerens Nybegynder
15. marts 2004 - 17:26 Der er 8 kommentarer og
1 løsning

Deling af connection imellem komponenter

Hej hej.

Jeg er ved at opgradere mig selv til ASP.NET ved at lave et CMS opbygget over n-Tier modellen (database-lag, forretningslogik, præsentationslag etc.). I den forbindelse er jeg rendt ind i en problemstilling som jeg ikke lige helt kan regne ud.

Jeg har lavet en række classes/komponenter i forretningslogikken til håndtering af brugere, de enkelte sider, rettigheder osv. osv. Disse classes bliver så benyttet i præsentationslaget.

Sp.: Hvordan laver jeg det sådan at alle de forskellige komponenter jeg benytter mig af i præsentationslaget deles om den samme connection?

Jeg vil helst undgå TOTALT at åbne og lukke connections i præsentationslaget for at adskille de forskellige lag så meget som overhovedet muligt, så derfor har jeg pt. programmeret connectionen ind i de enkelte classes.

Men hvis en side benytter flere classes (f.eks. min class til brugerhåndtering og min class til sidehåndtering), så vil der jo blive oprettet 2 connections til databasen! Eller er .NET intelligent nok til at håndtere det?

Eller gør jeg noget helt forkert?

/SoerenS
Avatar billede arne_v Ekspert
15. marts 2004 - 18:16 #1
Alle System.Data.Xxxx.XxxxConnection har indbygget connection pooling, så
det burde ikke være noget problem at bare åbne og lukke hele tiden.
Avatar billede soerens Nybegynder
15. marts 2004 - 18:39 #2
Også selvom jeg laver et nyt connection object hver gang?

Her er et kodeeksempel:

    Public Sub New()
        Dim strDSN As String

        ' Create a database connection
        strDSN = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\InetPub\db\cmt.mdb"
        _cnnDatabase = New OleDbConnection(strDSN)
    End Sub

(Post lige et svar arne_v, ku' være at der var point til dig :-)
Avatar billede arne_v Ekspert
15. marts 2004 - 18:43 #3
Ja.

Sådan virker en connection pool.
Avatar billede arne_v Ekspert
15. marts 2004 - 18:43 #4
svar
Avatar billede soerens Nybegynder
15. marts 2004 - 20:25 #5
Aha, har forsket lidt i dit svar arne_v. Det der .NET er sgu' da skide smart :-)

Tak for hjælpen, point til dig!

Her er lidt links eventuelt til andre interesserede:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconconnectionpoolingforsqlservernetdataprovider.asp
Forklarer at connections bliver "pool'et" ud fra connection string, samt noget om hvordan man kan styre poolen via parametre i connection string.

http://techrepublic.com.com/5100-6329-5034285-1.html
Lidt af det samme, men indeholder bl.a. en beskrivelse af hvordan man holder øje med poolen.
Avatar billede arne_v Ekspert
15. marts 2004 - 20:29 #6
Nu er en connection pool ikke noget der er opfundet i .NET - det har man brugt
længe.

Det nye er at det er indbygget i den grundliggende connection. Ellers skal
man selv ligge en connection pool ovenpå.
Avatar billede burningice Nybegynder
16. marts 2004 - 09:24 #7
arne_v>> er det ikke mere på driver-niveau at connection-pooling foregår? F.eks. kan man ikke have en connection-pool med en Access-db (ved godt at man ikke skal bruge den i forbindelse med produktion, men det er der nu mange der gør alligevel).
Avatar billede soerens Nybegynder
16. marts 2004 - 10:10 #8
cyber>> Nej, det foregår i .NET Framework Data Provideren (altså inden for selve frameworket), og fungerer også med en Access-db. Jeg er selvfølgelig ikke 100% sikker da jeg er ny inden for .NET, men det er hvad jeg læser ud fra nedenstående link.
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconconnectionpoolingforoledbnetdataprovider.asp)

Hvad er det helt nøjagtigt du mener man ikke skal bruge i forbindelse med produktion? En connection pool eller en Access database?
Avatar billede arne_v Ekspert
16. marts 2004 - 10:20 #9
cyberfessor>

Man kan godt bruge connection pool med en fil database som Access.

Jeg vil formode at OleDbConnection bruger connection pool for både
rigtige database servere og fil databaser (alt andet vil give noget
meget grim kode i den klasse).

Gevindsten ved en connection pool er nok mindre ved en fil database end
ved en database server, fordi overheadet ved at etablere en fysisk database
connection kun er validering og ikke transport connection + validering.

soerens>

Jet er en udmærket database i mange sammenhænge, men den har også
nogle mangler. Hvis databasen skal ligge på en anden server end
applikationen eller hvis der skal være mange samtidige brugere
som skal opdatere, så er performance ikke tilfredsstillende.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester