2011-03-28 63 views
1

是它是更好地打开连接到数据库 -在我使用或不使用后关闭数据库连接?

作任何querys ...更新....删除 -

后,我用它来关闭此连接

当程序加载时打开连接 -

并关闭程序时关闭?

在此先感谢

+0

第二种方法是最大的反模式之一。请不要 – Marcote 2011-03-28 19:17:24

回答

6

一般情况下,您关闭在你的代码(处置)尽快。用try/finallyusing块。

实际发生的情况取决于您的应用程序的ConnectionPool设置。

基本上,ConnectionPool的存在意味着您不必担心连接的使用(多少次,维护多久),它变成了一个外部配置。

顺便说一句:除了WinCE框架,略有different rules那里。

2

完成后始终关闭ADO.NET连接。原因是ado.NET基础结构将连接集中在一起,所以即使打开一个连接,第一次需要一段时间,通过关闭它释放到池中,以便应用程序的其他部分可以更快地建立连接。对于这个规则的一些限制可以用一些嵌入式数据库来完成,但是我们需要看一下这种情况。

2

您应该始终使用using块立即关闭连接。

1

关闭连接与Disposing不同。连接池可以基于连接字符串的字典查找来重新使用关闭的连接(您的连接字符串必须完全相同才能使用连接池,但此功能是透明的)。另一方面,如果您处置或使用USING,则连接对象将被销毁并且无法重新使用。

如果您打算在短时间内重新打开连接,那么使用Close会更高效。

+0

为了澄清,调用Dispose不会从连接池中删除连接。而且我会远离Close vs a Using语句的性能问题。 – 2011-09-12 20:17:21

+0

这里是微软基础类库团队(2010年5月6日)的开发者报价(http://social.msdn.microsoft.com/profile/david%20m.%20kean/):这是SqlConnection等的例外al,Close并不意味着与Dispose相同。关闭关闭连接,但允许您稍后通过调用Open来重复使用相同的连接实例。 Dispose会关闭连接,但不允许您重复使用相同的连接实例。 http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/b3587ccc-74e0-4575-9b60-7c529d2607ac – Bengie 2011-09-15 18:49:58

+0

请阅读“添加连接”部分:http://msdn.microsoft.com /en-us/library/8xx3tyca.aspx – 2011-09-15 21:11:51