不允许更改'ConnectionString'属性.连接的当前状态是打开的

doo*_*urt 1 asp.net sqlconnection

stackoverflow的第一次用户,但我已经在Coding Horror上进行了开发.

我遇到了上述错误,令人头疼.我安装了ELMAH和Google Analytics,随着网站流量的增加,我看到此错误的次数也增加了.

我已尽最大努力遵循Microsoft的原则:http://msdn.microsoft.com/en-us/library/ms971481.aspx在整个开发过程中,我根据多个建议来源尽可能地优化了我的代码网络.

我在公共类中有我的SqlConnection;

Public Class pitstop
Public Shared oConn As New System.Data.SqlClient.SqlConnection
    Public Shared Sub doConnect()
    If oConn.State = ConnectionState.Closed Then
        oConn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("pitstopConnectionString").ConnectionString
        oConn.Open()
    End If
End Sub
Public Shared Sub doGarbage()
    oConn.Dispose()
End Sub
' /// other code ///
End Class
Run Code Online (Sandbox Code Playgroud)

在我的主要应用程序页面中,我做了同样的事情:

 Private Sub doPump()
    pitstop.doConnect()
    Dim cmd As New System.Data.SqlClient.SqlCommand("doGetCategory", pitstop.oConn)
    Dim dt As New DataTable
    Dim dr As SqlDataReader

    cmd.Parameters.Add("@cat", SqlDbType.Int)
    cmd.Parameters("@cat").Value = CType(Request.QueryString("id"), Integer)

    cmd.CommandType = CommandType.StoredProcedure

    dr = cmd.ExecuteReader()
    While dr.Read()
        If dr.HasRows = True Then
            litCategory.Text = dr("category")
            litCategoryDesc.Text = pitstop.doMakeReadyForHTML(dr("desc"))
        End If
    End While
    cmd = Nothing
    dr.Close()
    pitstop.doGarbage()
End Sub
Run Code Online (Sandbox Code Playgroud)

我一直使用这种方法,而且大部分时间它运作良好,但现在网站变得非常繁忙,戏剧已经开始了!有没有人有任何想法?

我不想重写大量的代码,但我愿意接受建议.

:)

克里斯

Cha*_*ant 7

共享您的连接是个问题.

无需共享连接并产生您遇到的问题..net的连接池处理幕后真实连接的共享.

只需在doPump()中创建一个新连接

Private Sub doPump()
    Using Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("pitstopConnectionString").ConnectionString)
        Using Dim cmd As New SqlCommand("doGetCategory", conn)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.AddWithValue("@cat", CType(Request.QueryString("id"), Integer))
        conn.Open()
        Using Dim dr as SqlDataReader = cmd.ExecuteReader()
            While dr.Read()
                    litCategory.Text = dr("category")
                    litCategoryDesc.Text = pitstop.doMakeReadyForHTML(dr("desc"))
            End While
            dr.Close()
        End Using
    End Using
End Sub
Run Code Online (Sandbox Code Playgroud)