J'ai du mal à comprendre pourquoi le constructeur suivant ne ferme pas les connexions. Quand je regarde les connexions actives. Voici le code que j'ai..NET et fermeture des connexions SQL Server
Public Sub New(ByVal UserID As Integer)
Dim oConn As New SqlConnection(ConfigurationManager.ConnectionStrings("connStr").ToString())
Dim cmd As New SqlCommand("stored proc", oConn)
Dim sdr As SqlDataReader
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@userID", UserID)
oConn.Open()
sdr = cmd.ExecuteReader()
Try
If Not sdr.HasRows Then
sdr.Close()
If Not oConn Is Nothing Then
If oConn.State <> ConnectionState.Closed Then
oConn.Close()
End If
End If
cmd.Dispose()
Exit Sub
End If
'User has account in WATS, proceed to load account information
While sdr.Read
_firstname = Convert.ToString(sdr("First Name"))
_lastname = Convert.ToString(sdr("Last Name"))
End While
Catch ex As Exception
'Throw New Exception("User Error: " + ex.Message)
Finally
sdr.Close()
If Not oConn Is Nothing Then
If oConn.State <> ConnectionState.Closed Then
oConn.Close()
End If
End If
cmd.Dispose()
End Try
End Sub
Il semble bien à première vue; comment déterminez-vous que cela ne ferme pas les connexions? Continuez-vous à voir de nouvelles connexions s'ouvrir dans SQL Server chaque fois que vous exécutez cette opération, ou voyez-vous simplement la connexion? – Aaronaught
Tout d'abord, il est préférable de tirer parti de l'instruction 'Using' comme John le suggère ci-dessous. Deuxièmement, à cause de la façon dont vous avez organisé le code, il y a des fenêtres dans lesquelles vous avez alloué et ouvert la connexion, mais une exception peut survenir lorsque vous ne nettoyez pas la connexion. Par exemple, que se passe-t-il si 'sdr = cmd.ExecuteReader()' se déclenche? –