我的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个用户同时访问连接时,只会发生错误。
答案 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时,都会获得指向同一数据库的新实例。