一个ASP.net WebForms页面保持一个数据库连接?



我有一个网站,在负载下显示db连接池已耗尽。我也收到超时从SQL Server连接尝试。

该站点的网页做多个数据库请求-其中的请求不是所有在一个单一的数据库事务。所以我想知道的是,如果db连接很难获得,为什么结果db数据中没有孔?例如,如果一个页面请求a,然后请求B,为什么有些B没有发生?但没有迹象表明发生了什么。

如果一个网页设法从池中抓取一个db连接,它是否在其请求的持续时间内挂在它上,即使它重复调用打开和关闭它?

我能想到几个例子

一个案例是用户代码没有关闭或处置他们的联系。

所以,所有的连接代码应该在"中使用"块,以便正确地处理对象。

例如你可以这样写:

Dim rstData As New DataTable
Dim con as SqlCoonnection
con = New SqlConnection(My.Settings.TEST3)
Dim cmdSQL as SqlCommand
cmdSQL = SqlCommand(strSQL, con)
cmdSQL.Connection.Open()
rstData.Load(cmdSQL.ExecuteReader)

因此,在上面,我们执行一些命令从SQL server中提取数据。

但是,我们不抛出+处置上面的对象。

所以,你可以这样写:

Dim rstData As New DataTable
Using cmdSQL As New SqlCommand(strSQL, New SqlConnection(My.Settings.TEST3))
cmdSQL.Connection.Open()
rstData.Load(cmdSQL.ExecuteReader)
End Using
Return rstData

现在在上面我有一个使用"sql命令"对象。我没有创建一个单独的连接对象。但是,如果我创建了一个连接对象(如第一个示例),那么是的,我会建议使用using块。

但是,如果你快速查看代码,你可以这样做:

Dim rstData As New DataTable
Dim con as SqlCoonnection
con = New SqlConnection(My.Settings.TEST3)
Dim cmdSQL as SqlCommand
cmdSQL = SqlCommand(strSQL, con)
cmdSQL.Connection.Open()
rstData.Load(cmdSQL.ExecuteReader)
cmdSQL.Dispose
con.Dispose

最新更新