两个用户同时访问SqlConnection - 内部连接致命错误

时间:2016-05-25 16:08:00

标签: asp.net vb.net ado.net

我的Asp.Net应用程序上有一个简单的SqlConnection字符串

 Public Class SQLHelper

 Private Shared _con As SqlConnection

 Public Shared Function Connection(ByVal conStr As String) As SqlConnection
        Try
            _con = New SqlConnection(conStr)
            _con.Open()
            Return _con
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Function

End Class

当两个用户同时访问连接时,我们会收到内部连接致命错误。

注意:如果秒数有差异,则可以正常工作。当2个用户同时访问连接时,只会发生错误。

2 个答案:

答案 0 :(得分:1)

您的问题是因为您继续使用SqlConnection的同一共享实例。

不要使用SqlConnection的共享实例。 ADO.NET将为您管理sqlconnections 始终为针对数据库运行的每个查询创建新连接 如果您听说开放新的SqlConnection是一个昂贵的过程,那是真的。但ADO.NET将保持连接活动并重用它们 SQL Server Connection Pooling (ADO.NET)

从班级中删除Private Shared _con As SqlConnection并将您的功能更改为:

Public Shared Function CreateConnection(connString As String) As SqlConnection
    Return New SqlConnection(connString)
End Function

但现在这个功能似乎与New SqlConnection(connString)毫无意义。除非你在该函数中有其他逻辑

答案 1 :(得分:0)

我想有多个线程尝试同时使用相同的SqlConnection会导致问题。

尝试使用如下属性替换SqlConnection:

public SqlConnection con { get { return new SqlConnection(connectionString); } }

这样,每次访问con时,都会获得指向同一数据库的新实例。