0
我有一个旧的web应用程序写在ASP.Net 2.0 Web窗体。我在企业库中使用数据访问块,最近更新到5.0版。应用程序是分层的,即UI层,服务层,数据层。它还使用SQL Server 2008进行数据存储。企业库5.0连接池超时
我最近注意到当我运行应用程序并浏览到特定页面时出现以下错误。
超时已过期。在从池中获取连接之前已超时。发生这种情况的原因可能是因为所有连接池都在使用中,并且达到最大池大小。
这种情况往往发生在与数据库进行大量单独读取的页面上,也许在一个页面上多达20个。
下面显示了我的数据访问类的片段。
Public Class DataAccess
' create a private instance of the database factory
Private db As Database = DatabaseFactory.CreateDatabase()
Public Function ExecuteNonQuery(ByVal params() As SqlParameter, ByVal strSproc As String) As Integer
Dim intReturnValue As Integer = 0
Dim i As Integer
Dim cmd As DbCommand
cmd = db.GetStoredProcCommand(strSproc)
cmd.CommandTimeout = 120
For i = 0 To params.Length - 1
db.AddInParameter(cmd, params(i).ParameterName.ToString, params(i).DbType, params(i).Value)
Next
db.AddParameter(cmd, "return_value", DbType.Int32, ParameterDirection.ReturnValue, "", DataRowVersion.Default, 0)
db.ExecuteNonQuery(cmd)
intReturnValue = Int32.Parse(db.GetParameterValue(cmd, "@return_value"))
Return intReturnValue
End Function
Public Function ExecuteDataReader(ByVal params() As SqlParameter, ByVal SProc As String) As SqlDataReader
Dim i As Integer
Dim dr As SqlDataReader = Nothing
Dim cmd As DbCommand
cmd = db.GetStoredProcCommand(SProc)
cmd.CommandTimeout = 120
For i = 0 To params.Length - 1
db.AddInParameter(cmd, params(i).ParameterName.ToString, params(i).DbType, params(i).Value)
Next
dr = TryCast(DirectCast(db.ExecuteReader(cmd), RefCountingDataReader).InnerReader, SqlDataReader)
Return dr
End Function
在我的代码,一旦我有SqlDataReader的结束,我总是做这样的事情
If Not (drSource Is Nothing) Then
drSource.Close()
End If
你有没有什么人能看到,我很想念?它看起来像我的代码可能泄漏连接或不正确关闭?
我一直认为垃圾收集器摆脱了任何开放的连接。
任何反馈或帮助将不胜感激。
谢谢。