2009-11-12 105 views
0

我写了一个Web应用程序,其中我没有允许此应用程序使用连接池。我写了如下所示的示例代码,它从我的表中获取记录20次,并填写每次都有密切关系的数据集。SQL Server池问题

但是,如果我看看SQL Server活动监视器,它会显示一个连接在休眠模式下打开。

  1. 有人告诉我为什么会发生这种情况?
  2. 如果用户增加,这种睡眠连接会增加吗?
  3. 如果SQL Server将我的连接集中起来,那么为什么它的池如果我不允许为这个应用程序池?我怎样才能避免这种情况?

代码来获取数据

Try 
    Dim i As Integer 
    For i = 0 To 20 
    Dim _db As New commonlib.Common.DBManager(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString.ToString()) 
    GridView1.DataSource = _db.ExecuteDataSet(CommandType.Text, "SELECT * FROM BT_AppSetting") 

    GridView1.DataBind() 
    Next 
Catch ex As Exception 
    Response.Write(ex.Message.ToString()) 
    ex = Nothing 
End Try 

DBManager构造

'CONSTRUCTOR WHICH ACCEPTS THE CONNECTION STRING AS ARGUMENT 
Public Sub New(ByVal psConnectionString As String) 

    'SET NOT ERROR 
    _bIsError = False 
    _sErrorMessage = Nothing 

    _cn = New SqlConnection 
    _sConnectionString = psConnectionString 
    _cn.ConnectionString = _sConnectionString 

    Try 
     _cn.Open() 
    Catch ex As Exception 
     _bIsError = True 
     _sErrorMessage = ex.ToString 
     ex = Nothing 
    End Try 
End Sub 

ExecuteDataSet函数体

Public Function ExecuteDataSet(ByVal CmdType As CommandType, ByVal CmdText As String, ByVal ParamArray Params As SqlParameter()) As DataSet 

Try 
    Dim cmd As New SqlCommand 
    Dim da As New SqlDataAdapter(cmd) 
    Dim ds As New DataSet 

    PrepareCommand(cmd, CmdType, CmdText, Params) 

    da.Fill(ds) 

    cmd.Parameters.Clear() 

    If _cn.State = ConnectionState.Open Then 
    _cn.Close() 
    End If 

    Return ds 
Catch ex As Exception 
    _sErrorMessage = ex.ToString 
    _bIsError = True 
    ex = Nothing 
    Return Nothing 
End Try 

请帮我....等待的善意回复

+0

请告诉我们您的连接字符串,请! – 2009-11-12 06:18:46

+1

除非**明确**关闭连接池,否则默认情况下会进行池化;也 - 为什么你要把它关掉呢? – 2009-11-12 06:22:22

回答

0

1)我想sql server没有立即关闭连接。那就是你看到它的原因。

2)由于您正在关闭连接,您应该只能看到一个。除非你的用户在同一时间运行代码。例如,如果它在一个网页中,并且有2个用户,你将会看到2个连接。

此外,如果不关闭你的连接(只是尝试)你的连接数将(应该:))上升。

这是你的.net应用程序池连接,而不是sql服务器。