尽管最后阻止关闭连接,SQL连接池超出限制

时间:2016-12-20 00:02:02

标签: vb.net sqlconnection

我已经在这个网站上下翻过但我找不到我的WebService连接池的用途。使用应用程序,我在我的服务上调用WebMethod,然后触发下面的代码。

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 CustomerID=@CustomerID 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

1 个答案:

答案 0 :(得分:-1)

您可能在翻译帖子的代码时丢失了它 - 但是没有cn.Open()。我也会在Try语句中使用cn.Close(),然后就像一个catch-all将结束语留在finally语句中。您还可以在catch语句中包含check和cn.close(),以便任何异常也将关闭连接。

其次,在使用它填充dataadapter之前,sqlcommand的using语句结束。修复这些内容并终止现有连接。验证交易中的结账连接。也许请一步一步确保它不会秘密地抛出异常或将异常字符串写入控制台,以防它跳过。