Я занимаюсь этим сайтом вверх и вниз, но я не могу найти, что происходит с моим пулом соединений WebService. Используя приложение, я вызываю WebMethod на моем сервисе, который, в свою очередь, запускает код ниже.Пул соединений SQL Исключительный предел, несмотря на то, что наконец блокируют закрытие соединения
Using cn As New SqlConnection(ConnectionString)
Try
Using cmd As New SqlCommand()
cmd.Connection = cn
cmd.CommandType = CommandType.Text
cmd.CommandText = "select * " &
" from Customer " &
" where Customer[email protected] and active=1"
cmd.Parameters.Add("@CustomerID", SqlDbType.Int, 4)
cmd.Parameters("@CustomerID").Value = CustomerID
End Using
da = New SqlDataAdapter(cmd)
da.Fill(ds, "Customer")
Catch ex As Exception
Throw ex
Finally
If cn.State = ConnectionState.Open Then
cn.Close()
End If
End Try
End Using
Тогда в моем SSMS я огнь ниже, и я могу видеть на моей БД у меня еще есть активное соединение со статусом «спящим»
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName,
status
FROM
sys.sysprocesses
WHERE
dbid = 16 'my dbid
GROUP BY
dbid, loginame, status
я прохожу над подобными методами, и мои NumberOfConnections просто продолжает строительство. помочь
DBNAME | NumberOfConnections | LoginName | Status
MyDB | 1 | jgritten | sleeping
Вы уверены, что нет замков? – Codexer
Нет никакого смысла в вашем обработчике исключений. Блок finally бесполезен, поскольку соединение не может быть открыто в этой точке, и даже если оно есть, оно будет закрыто в инструкции 'End Using'. Кроме того, ваш обработчик исключений хуже, чем никакой обработчик, потому что вы используете 'Throw ex'. Поступая таким образом, вы теряете всю информацию стека вызовов и делаете свой метод источником исключения. Если вам когда-нибудь понадобится повторное исключение, которого вы не здесь, то вам следует просто использовать «Бросок». – jmcilhinney
Обработчик был там, потому что я где-то читал, если во время участка адаптера произошла ошибка, это может быть пропущено закрытие – jgritten