2009-11-12 9 views
0

J'ai écrit une application Web dans laquelle je n'ai pas autorisé le regroupement de connexions pour cette application. J'ai écrit un exemple de code comme indiqué ci-dessous qui enregistre 20 fois de ma table et remplit l'ensemble de données que j'ai la connexion étroite à chaque fois. Mais si je regarde dans le moniteur d'activité SQL Server, il me montre une connexion ouverte en mode veille.Mise en pool SQL Server Problème

  1. quelqu'un me dit pourquoi cela se produit?
  2. cette connexion de sommeil augmente-t-elle si les utilisateurs augmentent?
  3. Si SQL Server met en pool ma connexion, pourquoi sa mise en pool si je n'ai pas autorisé la mise en pool pour cette application? Comment puis-je éviter ça?

Code pour récupérer les données

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 

constructeur 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 

corps ExecuteDataSet Fonction

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 

S'il vous plaît aidez-moi .... En attente de réponse type

+0

montrez-nous votre chaîne de connexion, s'il vous plaît! –

+1

sauf si vous ** désactivez ** explicitement la mise en pool des connexions, elle sera mise en pool par défaut; aussi - pourquoi diable voulez-vous l'éteindre quand même ??? –

Répondre

0

1) Je pense que le serveur sql ne ferme pas la connexion tout de suite. C'est pourquoi tu le vois.

2) Comme vous fermez la connexion, vous ne devriez en voir qu'une seule. À moins que vos utilisateurs n'exécutent le code en même temps. Par exemple, si c'était dans une page Web et qu'il y a 2 utilisateurs, vous verrez/verriez 2 connexions.

Aussi si ne pas fermer vos connexions (juste pour essayer) votre nombre de connexion va (devrait :)) monter.

C'est votre application .net qui regroupe la connexion et non le serveur sql.