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

Two user access the SqlConnection at same time - Internal connection fatal error

我的 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个用户同时访问连接时才会出现错误戳。

我认为让多个线程尝试同时使用同一个 SqlConnection 会给您带来问题。

尝试用 属性 替换您的 SqlConnection,如下所示:

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

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

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

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

从 class 中删除 Private Shared _con As SqlConnection 并将函数更改为:

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

但现在这个功能与 New SqlConnection(connString) 相比似乎没什么意义。除非你在那个函数里面有一些其他的逻辑