两个用户同时访问 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)
相比似乎没什么意义。除非你在那个函数里面有一些其他的逻辑
我的 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)
相比似乎没什么意义。除非你在那个函数里面有一些其他的逻辑