Не видя ваш код, невозможно дать однозначный ответ; может иметь место в том случае, если вы недостаточно быстро приводите в порядок соединения с базой данных.
Если у вас есть что-то вроде:
While( True )
Dim con as new SqlConnection(connectionString)
con.Open()
Dim cmd as New SqlCommand("usp_getJob", con)
cmd.CommandType = CommandType.StoredProcedure
Dim dr as SqlDataReader = cmd.ExecuteReader(CommandBehavior.SingleResult Or CommandBehavior.SingleRow Or CommandBehavior.CloseConnection)
If( dr.Read() )
DoSomething(dr)
Else
Thread.Sleep(10)
End If
End While
... тогда он откроет соединения быстрее, чем они сами исчезнут.
Существует несколько альтернатив, и я бы рекомендовал использовать блоки Using
, чтобы максимально быстро вернуть соединение в пул соединений:
While( True )
Using con as new SqlConnection(connectionString)
con.Open()
Using cmd as New SqlCommand("usp_getJob", con)
cmd.CommandType = CommandType.StoredProcedure
Using dr as SqlDataReader = cmd.ExecuteReader(CommandBehavior.SingleResult Or CommandBehavior.SingleRow Or CommandBehavior.CloseConnection)
If( dr.Read() )
DoSomething(dr)
dr.Close()
Else
Thread.Sleep(10)
End If
End Using
End Using
End Using
End While
Затем они вызовут Dispose()
для SqlDataReader
, SqlConnection
и SqlCommand
- любой из первых двух вызовет сброс соединения в пул соединений (учитывая, что мы спросили SqlDataReader
до CloseConnection
при его закрытии)