Avatar billede Søren Bech Morsing Praktikant
02. februar 2012 - 10:30 Der er 4 kommentarer og
1 løsning

databaseforbindelse - åben eller lukket?

Jeg benytter nedenstående funktion til at åbne/lukke min database (virker fint).

Jeg vil gerne ændre det, så connectSql2 forbliver åbent så længe programmet kører - og ved application.exit kontrolleres så for om der er en forbindelse der evt. lukkes.
Hvordan gør man det (er klar over jeg bare kan åbne forbindelsen i 'main', men hvordan bruger jeg den på tværs af mange windows forms?

Min nuværende funktion:
Public Function openCloseSql2(ByVal openClose As Boolean, ByVal server As String, ByVal database As String) As Boolean

        If (openClose = True) Then
            connectSql2 = New ADODB.Connection

            connectSql2.ConnectionString = "Provider=sqloledb;Data Source=" & server & ";Initial Catalog=" & database & ";Integrated Security=SSPI" 'User Id=xxxx;Password=yyy; ' medsendes/bruges ikke
            connectSql2.ConnectionTimeout = 0
            connectSql2.Open()
            openCloseSql2 = True
        Else

            connectSql2.Close()
            connectSql2 = Nothing
            openCloseSql2 = false

        End If

End Function
Avatar billede keysersoze Guru
02. februar 2012 - 10:48 #1
Som udgangspunkt er det en rigtig dårlig idé at holde en connection åben i så lang tid - det gælder om at åbne den, benytte den og lukke så hurtigt som muligt.

Hvorfor mener du at det vil gavne at holde den åben over hele programmets levetid?
Avatar billede Søren Bech Morsing Praktikant
02. februar 2012 - 11:08 #2
eksempel:
Sub: Jeg laver en import af data, jeg starter med at åbne db og indlæser 100.000 linjer fra en tekstfil.
- men inde i min sub, kalder jeg så en en anden sub/funktion, hvor jeg skal slå nogle ting op - nu er jeg så nødt til at åbne connection igen+lukke (hver gang denne sub/funktion kaldes).

Det var egentlig ovenstående jeg gerne ville løse - så det pr. kørsel/kald kun blev til en åbning og luk af databasen
Avatar billede arne_v Ekspert
02. februar 2012 - 15:33 #3
Du skal vel have den connection sendt rundt mellem alle kaldene som argument. Det kan godt goeres.

Men du kan ogsaa bare aabne og lukke - fordi med en connection pool saa det koster ikke noget at aabne og lukke hele tiden.

Og du boer skifte fra ADODB til .NET SqlClient.
Avatar billede Søren Bech Morsing Praktikant
12. februar 2012 - 17:00 #4
så i stedet for den funktion jeg har der returnerer en boolean om forbindelesen er åben, så skal den bare laves noget ala: AS '.netclient'

Jeg forsøger ud fra dit forslag Arne_v
Hvis du lægger svar inden for 8 dage får du point - ellers lukker jeg spørgsmålet.
Avatar billede arne_v Ekspert
12. februar 2012 - 20:53 #5
svar
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
Kurser inden for grundlæggende programmering

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