我们有一个应用程序,它使用 SQL Server 2008 R2 数据库。在应用程序中,使用 SqlConnection
对象调用数据库。
这个 SqlConnection
对象只会被初始化一次,第一次访问时,并在整个应用程序中被重复使用。我们所使用的操作如下:
Protected _cn As SqlConnection = Nothing
...
Protected Sub Open()
If _cn Is Nothing Then
_cn = New SqlConnection(_sqlConn)
End If
If _cn.State = ConnectionState.Closed OrElse _cn.State = ConnectionState.Broken Then
_cn.Open()
End If
End Sub
程序在正常执行期间完美运行。但是,应用程序的某些部分以多线程方式执行时,如果进行其他操作,就会频繁出现错误。
经过一番探索,我发现这是因为有时两个不同的线程都试图使用相同的 SqlConnection
对象。
所以,在确定问题后,我现在需要找到解决方案。显而易见的解决方案是每次数据库调用需要连接对象时重新创建 SqlConnection
对象——在这种情况下,它永远不会被共享。是否存在任何理由不这样做呢?最初我认为我们仅为了性能原因而对每个应用程序会话使用一个连接对象,但实际上情况如何呢?
如果我们确实需要保持一个连接对象处于打开状态,那么建议的解决方案是什么?我应该设置某种定时器,直到连接对象可用,然后再访问它吗?