gpt4 book ai didi

.NET、SqlConnection 对象和多线程

转载 作者:行者123 更新时间:2023-12-02 08:59:30 27 4
gpt4 key购买 nike

我们有一个使用 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 对象 - 在这种情况下,它永远不会被共享。有什么理由这样做吗?出于性能原因,我最初假设应用程序的每个 session 只有一个连接对象,但实际情况是这样吗?

如果我们确实需要仅保持一个连接对象打开,建议的解决方案是什么?我是否应该放置某种计时器,它会一直循环直到连接对象可用,然后访问它?

最佳答案

The obvious solution is to just re-create the SqlConnection object every time a database call requires one - in this case, it would never be shared. Is there any reason not to do this?

相反,这绝对是你应该做的。这就是 SqlConnection 的设计目的。您应该使用 Using 语句在您使用它的 block 末尾自动关闭连接,并且连接池机制将自动处理与数据库的真正底层连接。

关于.NET、SqlConnection 对象和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23942364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com