Avatar billede lund_dk Praktikant
06. december 2007 - 14:51 Der er 7 kommentarer

Fejl i connections

Jeg er kontaktet af min udbyder, som mener jeg ikke lukker mine connections korrekt og det belaster serverne.

jeg har i toppen af alle mine sider, hvor jeg åbner databasen, og i slutningen af siderne lukker jeg med
conn.close
set conn = nothing.

Ligeledes når jeg åbner op for mine tabeller, lukker jeg med
rs.close
set rs = nothing

Dette er vel korrekt..?

Jeg kommer så bare til at tænke på, er det OK at åbne til databasen i toppen, og lukke igen i bunden..

her tænker jeg på, hvis jeg eks har en
Response.Redirect "default.asp" midt på en side, så når den vel aldrig ned i bunden og får lukket min conn igen?

I så fald, hvordan bør jeg så håndtere.. skal jeg åbne for conn hver gang jeg også åbner med rs, eller hvordan gør jeg det bedst?
Avatar billede thesurfer Nybegynder
06. december 2007 - 15:11 #1
Det er noget der bliver diskutereret engang i mellem..

Skal man benytte sig af 1 forbindelse (dvs, ikke lukke)? Skal man åbne og lukke med det samme?

Personligt åbner jeg så tæt på koden, der faktisk bruger databasen, og lukker snarest muligt..

Hvis jeg skal bruge databasen flere steder på siden, betyder det er jeg opretter og nedlægger forbindelsen flere gange.. Det er vist lidt overflødigt, hvis man skal genbruge forbindelsen..
Men sådan gør jeg normalt..


Jeg har faktisk lavet nogle funktioner, som jeg kalder, når jeg skal bruge databasen.. funktionerne smider jeg i en fil, som jeg indkluderer på de sider, der brugre databasen..

Eksempel:

dbfil.asp:
function open
...åben forbindelse til databasen...
end function

function close
...luk forbindelsen...
end function

og inkluderingen:
<!-- include file="dbfil.asp" -->

Brug af funktionerne:

open
set rs = ....
...
close
Avatar billede lund_dk Praktikant
06. december 2007 - 15:17 #2
Kunne være jeg skulle forsøge med det, for når mit site gang på gang ligger database serveren ned, må der være noget galt et sted..

Det undrer mig bare det går så galt, når jeg netop er obs på at alt hvad jeg åbner, det lukkes igen.. og har tjekket samtlige åbninger, og altlukkes igen..

Kan der være andre faktorer som gør at det går galt..?
Avatar billede cpufan Juniormester
06. december 2007 - 15:38 #3
du skal lukke så snart du har udtrukket og udskrevet dit recordset,


at åbne og lukke flere gange, kræver mindre,
da serveren automatisk holder forbindelsen i en cache i et stykke tid,
og genbruger denne forbindelse hvis der spørges på den samme igen indenfor
kort tid (ved ikke eksakt minutter)
Avatar billede lund_dk Praktikant
08. december 2007 - 19:10 #4
Jeg har forsøgt med
Function ConnOpen
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Driver={MySQL ODBC 3.51 Driver};Server="& SQLserveradr &";Database="& SQLdatabase &";Option=3;User="& SQLlogin &";Password="& SQLpassword & ";"
end function

Function ConnClose
conn.close
set conn = nothing
end function


Og inden jeg åbner et recordset, laver jeg

ConnOpen
set rs = ...
rs.Close
set rs = nothing
og slutter med ConnClose


MEN, mit recordset giver fejl og siger at der ikke er åbnet til databasen, er min function ikke korrekt?
Avatar billede thesurfer Nybegynder
08. december 2007 - 23:03 #5
Du får sikkert fejlen, fordi "conn" bruges lokalt, inde i dine functions..
En funktion er et scope, hvilket betyder at variabler der defineres/bruges i selve funktionen, kun kan tilgås fra inde i funktionen.

Du kan løse problemet, ved at dimme "conn" uden for...

Eksempel på filen:

dim conn

function ConnOpen
...
end function

function ConnClose
...
end function


Prøv det..
Avatar billede lund_dk Praktikant
26. april 2012 - 08:33 #6
et par år senere.. kast et svar for point ;)
Avatar billede thesurfer Nybegynder
13. maj 2012 - 14:59 #7
Bedre sent end aldrig :-p
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