为何断开与数据库的连接?

时间:2011-07-01 14:40:46

标签: c# sql-server database

背景信息:我使用C#进行编码,使用Microsoft SQL Server进行数据库编写。

我在Google上找不到这方面的内容,所以我在这里问:在执行查询后,我是否应该始终关闭与数据库的连接?

我在两种解决方案之间徘徊(可能存在更好的解决方案......):

  • 在查询前打开连接,然后在SQL查询后立即关闭

  • 或在我的应用程序开始时打开连接,并在每个SQL查询之前检查连接是否仍在运行,并在需要时重新打开它。

在过去,我使用了第一个解决方案,但我发现打开一个新连接可能需要相当长的时间(尤其是通过3G连接到我的局域网的VPN连接),这会减慢我的应用程序。这就是为什么我决定采用第二种解决方案(在这种情况下,如果我们忘记超时,我的连接应该总是在上面),并注意到一些更好的性能。

我是否需要在应用程序结束时关闭连接,还是可以忘记它?

3 个答案:

答案 0 :(得分:13)

是的,您应该在每次SQL查询后关闭连接。数据库连接池将处理物理网络连接,并为您保持打开状态。你说你发现打开连接可能需要一些时间 - 你是否发现应用程序真的多次这样做了?

(我希望你真正的应用程序不会通过3G直接与数据库对话,顺便说一下......大概这只是出于开发目的......)

答案 1 :(得分:4)

要记住的一件重要事情是,您使用的每个唯一连接字符串都有一个唯一的连接池...所以总是使用相同的连接字符串,除非您需要连接到不同的数据库(或有独特的要求)。

这是一篇关于connection pooling的System.Data.SqlClient.SqlConnection的好文档。

答案 2 :(得分:0)

这在很大程度上取决于您预计连接数据库所需的客户端数量。保持连接打开,可能会阻止其他用户在等待打开连接时访问数据库。