2009-11-12 81 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服務器。