我们应该在使用另一个查询之前关闭与Sql Server数据库的连接吗?

时间:2011-12-31 08:19:48

标签: sql-server-2008 visual-studio-2008

当我们想从visual studio连接到数据库时,我们是否应该始终检查(在使用另一个查询之前)如果我们的连接打开,关闭它并再次打开它?

 if(connection is open){
  close connection;
   }  
  open connection for another use;

2 个答案:

答案 0 :(得分:4)

假设您使用的是.NET,通常应该为每个逻辑操作打开和关闭连接。如果你在相同的代码路径中进行多个查询(即你知道你将要进行另一个查询),那么保持连接打开是有意义的,但我不会让它保持打开状态“以防万一。”

请记住,.NET中的连接池使“打开连接”相当便宜,因为无论如何网络连接仍然会启动。通常你会使用类似的东西:

using (SqlConnection connection = new SqlConnection(...))
{
    connection.Open();
    using (SqlCommand command = new SqlCommand(connection, sql))
    {
        // Execute the command etc
    }
}

using语句将在您完成后自动“关闭连接”(读取:将其返回到连接池)。

保持每个查询(或一组查询)在逻辑上是分开的意味着它更难以结束竞争条件,线程问题等。我不会建议将连接保持为全局变量或类似的东西这一点。

当然,如果您使用LINQ to SQL之类的东西,则可能主要为您完成连接处理。

答案 1 :(得分:1)

这取决于,但在大多数情况下 - 答案是

只有在查询之间的时间相对较长时才应关闭连接。

个人认为,如果查询没有语义连接,则应该关闭连接 - 即。来自不同工作流程或其他逻辑上完整的部分的查询。

特别适用于您的情况 - 如果您使用连接池 - 无所谓 - 您是否会关闭连接,

<强> BUT

如果不正确使用事务或设置会话状态SET语句,这可能会干扰将来的查询 - 那么我建议关闭连接并重新打开它 - 只是为了确保您提交或滚动将所有遗忘的事务和会话状态重置为默认值