Avatar billede mach3 Nybegynder
15. januar 2005 - 17:40 Der er 15 kommentarer og
2 løsninger

Exception handling

Jeg har lavet nogle try-catch blokke i koden. Så i tilfælde af fejl går applikationen ikke ned i første omgang. Men der er det problem at når man efterfølgende forsøger at navigere rundt, så kommer der en fejl:

Exception Details: System.InvalidOperationException: The connection is already Open (state=Open).

Kan jeg ikke gøre et eller andet sådan så hver gang jeg fanger en exception lukker forbindelsen til databasen. Det kan være den er lukket, men det er vel ikke skadeligt at forsøge at lukke den igen.
Avatar billede arne_v Ekspert
15. januar 2005 - 17:42 #1
Hvorfor tester du ikke for connection state inden du kalder Open ?
Avatar billede mach3 Nybegynder
15. januar 2005 - 17:43 #2
Det lyder som en god ide Arne_v - har du et lille eksempel?
Avatar billede guidmaster Nybegynder
15. januar 2005 - 17:44 #3
I stedet for en try catch, så brug en try catch finally. Finally bliver altid kørt, og derfor er det en rigtig god idé at lukke din connection der ;)
Avatar billede arne_v Ekspert
15. januar 2005 - 17:45 #4
if(con.State != ConnectionState.Open)
{
  con.Open();
}

eller

If con.State <> ConnectionState.Open Then
  con.Open
End If
Avatar billede guidmaster Nybegynder
15. januar 2005 - 17:49 #5
Og hvis man så bruger finally istedet:
try
{
    }
    catch (Exception ex)
    {
           
}
finally
{
if(con.State != ConnectionState.Open)
    {
    con.Close();
    }
}
Avatar billede mach3 Nybegynder
15. januar 2005 - 17:50 #6
arne_v >> Hva så hvis den ER åben? Så får jeg jo ikke lov til at åbne forbindelse til databasen?
Avatar billede arne_v Ekspert
15. januar 2005 - 17:51 #7
guidmaster>

==
Avatar billede arne_v Ekspert
15. januar 2005 - 17:51 #8
mach3>

Hvis den er åben, så skal du vel ikke åbne den igen ??
Avatar billede guidmaster Nybegynder
15. januar 2005 - 17:52 #9
arne_v> Ups - men som VB mand er det vel okay at taste forkert i C# :)
Avatar billede guidmaster Nybegynder
15. januar 2005 - 17:53 #10
mach3>> Hvis du try catch finally kommer du aldrig ud for dette - og så er det faktisk et af design patterns som MS angiver ;)
Avatar billede arne_v Ekspert
15. januar 2005 - 17:54 #11
Det er meget almindeligt at bruge en finally til at lukke en database
connection i.

Men det er i det gængse kontekste med en metode med:

Open
do something
Close

Hvis de forskellige ting er drysset rundt så kan finally blive ren
kode obfuskering.
Avatar billede mach3 Nybegynder
15. januar 2005 - 17:55 #12
arne_v >> det har du ret i.

hvis forbindelsen allerede er åben når man forsøger at åbne den så er det vel et sikkert tegn på at der er gået et eller andet galt? (jeg er ikke så rutineret i database forbindelser, håber i vil bære over med de "dumme" spørgsmål :-))
Avatar billede arne_v Ekspert
15. januar 2005 - 18:10 #13
Det afhænger jo af din logik.

Exceptions og try catch er meget smarte. Men du skal designe din applikation
sådan at du også efter en exception og catch ved i hvilken state din
applikation er.

Jeg ved ikke om det i din applikation er en fejl situation at du skal have
åbnet en connection som allerede er åben. Det afhænger af dit design.
Avatar billede mach3 Nybegynder
15. januar 2005 - 18:28 #14
Godt design er ikke noget man lærer natten over - det er jeg klar over. Men kender i nogle gode sider der forklarer om de forskellige ting?
Avatar billede mach3 Nybegynder
16. januar 2005 - 18:12 #15
Lukker. Giv nogle svar. Takker
Avatar billede arne_v Ekspert
16. januar 2005 - 18:49 #16
svar
Avatar billede guidmaster Nybegynder
17. januar 2005 - 00:42 #17
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
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