Avatar billede carstenandersen Nybegynder
08. november 2010 - 11:55 Der er 14 kommentarer og
1 løsning

Lukke korrekt for database + kald

Hej eksperter

Jeg har arbejdet med at lukke korrekt for min database, hvilket jeg hidtil har gjort ved at indsætte nedenståede kode i bunden af alle sider:

Conn.Close
Set Conn = Nothing

men som jeg læser her på eksperten og andre steder, så er det ikke nok blot at lukke for databasen, men man skal også lukke for hvert recordset (set rs = ...).

Hvor vigtigt er det?

Scannet har det med, http://www.scannet.dk/dk/produkter/mailweb/webhotel/faqsupport/sup-263/, men f.eks. har Dandomain det ikke med, http://www.dandomain.dk/support/prog/asp-scripts-mysql.html?

Hvis det er vigtigt, at det kommer med, skal alle "set = rs.." lukkes særskilt, altså:

RS.close
Set RS = nothing
RS2.close
Set RS2 = nothing
RS3.close
Set RS3 = nothing
...... osv.
Conn.Close
Set Conn = nothing

eller kan alle rs(nr) lukkes med en kode?

Hvad er konsekvensen, hvis der ikke lukkes korrekt? Kan x-antal ikke lukkede connections til database betyde nedbrud af databaseserver?

Virkelig på forhånd tak.
Avatar billede mcb2001 Nybegynder
08. november 2010 - 13:07 #1
alle databaser har timeout på deres tråde, så med mindre du har en meget stor mængde brugere og en meget lille mængde tråde tilgængeligt, så skal du ikke bekymre dig voldsomt over det.

Og du bør bare kunne nøjes med at lukke din forbindelse til databasen for at frigive ressourcerne.
Avatar billede arne_v Ekspert
08. november 2010 - 13:09 #2
Det der er ADO (hvilken database det er op imod er ikke så vigtigt).

Du skal bruge:

RS.Close
Set RS = Nothing

Den første sker der måske ikke noget ved at glemme. Men gør det alligevel.

Hvis du glemmer den anden så vil du risikere memory leaks. ADO er COM og COM bruger reference counting.

Så brug begge!
Avatar billede carstenandersen Nybegynder
08. november 2010 - 13:17 #3
Tak for jeres svar.

arne_v, den første er det rs.Close? Den anden, er det Conn.Close?

Lukker rs.close alle rs-udtræk, altså rs, rs2, rs3 osv, eller skal de lukkes særskilt, se mit spørgsmål?
Avatar billede arne_v Ekspert
08. november 2010 - 13:51 #4
første:

RS.Close

anden:

Set RS = Nothing
Avatar billede carstenandersen Nybegynder
08. november 2010 - 14:00 #5
Ok

Mangler stadig lige at vide, om RS.Close lukker alle udtræk. Skal:

SQL = "Select * from Brugere where Id = 1"
Set rs = Conn.Execute(SQL)

SQL2 = "Select * from Brugere where Id = 2"
Set rs2 = Conn.Execute(SQL2)

SQL3 = "Select * from Brugere where Id = 1"
Set rs3 = Conn.Execute(SQL3)

lukkes med:

RS.Close
Set RS = Nothing

eller med:

RS.Close
Set RS = Nothing
RS2.Close
Set RS2 = Nothing
RS3.Close
Set RS3 = Nothing

?
Avatar billede arne_v Ekspert
08. november 2010 - 14:08 #6
RS, RS2 og RS3 har ikke noget med hinanden at gøre.

De skal lukkes alle 3 separat.
Avatar billede carstenandersen Nybegynder
08. november 2010 - 14:34 #7
Super :-)

Smid begge et svar. arne_v får 150 og 50 til mcb2001.

Tak for jeres hjælp
Avatar billede arne_v Ekspert
08. november 2010 - 17:25 #8
svar
Avatar billede ksoren Nybegynder
08. november 2010 - 17:42 #9
Den der nothing ...

http://msdn.microsoft.com/en-us/library/f8tbc79x%28VS.85%29.aspx

De siger, at når en given variabel forlader "scopet", så bliver den automatisk nothing'et.
Avatar billede carstenandersen Nybegynder
09. november 2010 - 10:38 #10
mcb2001, jeg mangler et svar for at kunne lukke ;-)
Avatar billede carstenandersen Nybegynder
10. november 2010 - 11:01 #11
Jeg har fordelt fuld point til arne_v for at kunne få lukket tråden. mcb2001, hvis du gerne vil have de 50 point, så åbner jeg blot et nyt spørgsmål.
Avatar billede mcb2001 Nybegynder
10. november 2010 - 11:10 #12
det er okay.... :-)
Avatar billede carstenandersen Nybegynder
10. november 2010 - 11:26 #13
Skal lige forstå dig rigtigt ;-) Okay til ikke at få point, eller okay til, at jeg opretter et nye spørgsmål?
Avatar billede mcb2001 Nybegynder
10. november 2010 - 11:33 #14
okay ikke at få point. Jeg har 8000 og skal ikke dele ret mange ud lige foreløbigt :-)
Avatar billede carstenandersen Nybegynder
10. november 2010 - 11:38 #15
:-)
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
Computerworld tilbyder specialiserede kurser i database-management

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