webForumDet fria alternativet

Close metod?

.NETur .NET

5 svar · 307 visningar · startad av Arne

Medlem sedan maj 2000267 inlägg
Frågan#1

För att ej göra fel skulle jag vilja få lite expertis kommentar vad det gäller Close metod både för sql databas koppling och SqlCommand.

Jag öppnar min databaskoppling i Sub Page_Load
Jag har ett antal subbar med datareader, insert och update.

Ska jag avsluta varje sub i Try / Catch med:
MyCommand.Dispose()
MyConnection.Close()

eller

MyCommand.Close()
MyConnection.Close()

Eller räcker det med MyCommand.Connection.Close()

eller kan jag lägga MyCommand.Dispose() och MyConnection.Close() utanför Try / Catch och det är lika bra eller????

Eller kan jag avsluta hela koden med en allmän stängning av databaskopplingen och MyCommand??

Kan jag få några bra tips för hur jag ska göra så att det blir rätt och inte som jag tror blir rätt........

Det är inte enkelt när man inte riktigt förstår och i min bok förklaras det inte så bra.

Medlem sedan maj 20012 812 inlägg
#2

All stängning av objekten skall ligga i en finally{} method som tillhör ditt Try-catch block. finally blocket kommer ALLTID att köras, det ser kompilatorn till, vilket gör att även om du skulle få ett fel i ditt catch{} block så kommer stängningen att genomföras om det ligger i ett finally{} block.

Du "skall" alltid göra en close på alla dina objekt, om du missar det så tar GC hand om det, när den tycker att det finns behov för det, men om du gör close() på dina objekt så kommer de att försvinna mycket tidigare än om du inte gör det, och det sparar resurser.

Sedan skall det inte göra någon skillnad om du gör Close() eller dispose() eftersom de enligt praxis skall göra samma sak, men är man orolig att MS inte har koll på sin programmering så gör båda!

- M

Medlem sedan maj 2000267 inlägg
#3

solklart

Man tackar för ett solklart svar.......

Medlem sedan apr. 20012 266 inlägg
#4

Som alternativ till try-catch kan man väl använda using() ?

using(Connection conn = new Connection())
{
 // bla bla
}
Medlem sedan maj 20012 812 inlägg
#5

Nja!

Du kan inte likställa using med try-catch, det är mer samma som try-finally.

Catch satsen använder man ju till att fånga specifika fel och gör något med dem och sedan låta sin programkod fortstätta.

Om du använder using så missar du catchen, men du är säker på att din kod städas upp efter dig även om något skulle gå fel.

- M

Medlem sedan apr. 20012 266 inlägg
#6

Det var det jag menade, kanske skulle skrivit try-finally i stället :)

136 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)