Sql server 2008 在使用另一个查询之前,是否应该关闭与Sql Server数据库的连接?

Sql server 2008 在使用另一个查询之前,是否应该关闭与Sql Server数据库的连接?,sql-server-2008,visual-studio-2008,Sql Server 2008,Visual Studio 2008,当我们想从VisualStudio连接到数据库时,我们是否应该(在使用另一个查询之前)检查一下,如果我们的连接是打开的,关闭它,然后再打开它 if(connection is open){ close connection; } open connection for another use; 视情况而定,但在大多数情况下,答案是否定的 只有在查询之间的时间相对较长时,才应关闭连接 我个人认为,如果查询在语义上没有连接,即来自不同工作流或其他逻辑完整部分的查询,那么应该关闭

当我们想从VisualStudio连接到数据库时,我们是否应该(在使用另一个查询之前)检查一下,如果我们的连接是打开的,关闭它,然后再打开它

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

视情况而定,但在大多数情况下,答案是否定的

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

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

尤其是对于您的情况-如果您使用连接池-这无关紧要-您是否会关闭连接

但是


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

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

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

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

尤其是对于您的情况-如果您使用连接池-这无关紧要-您是否会关闭连接

但是


如果不正确地使用事务或设置会话状态
SET
语句,这可能会干扰将来的查询-那么我建议关闭连接并重新打开它-只是为了确保,如果您提交或回滚了所有已忘记的事务,并且会话状态已重置为其默认值,则假定您使用的是.NET,通常应为每个逻辑操作打开和关闭连接。如果您在同一代码路径中执行多个查询(即,您知道您将要执行另一个查询),那么保持连接打开是有意义的,但我不会“以防万一”地保持连接打开

请记住,.NET中的连接池使“打开连接”变得相当便宜,因为无论如何网络连接仍将处于运行状态。通常,您会使用以下内容:

using (SqlConnection connection = new SqlConnection(...))
{
    connection.Open();
    using (SqlCommand command = new SqlCommand(connection, sql))
    {
        // Execute the command etc
    }
}
完成后,
using
语句将自动“关闭连接”(读取:将其返回到连接池)

将每个查询(或查询集)保持逻辑上的独立意味着很难解决争用条件、线程问题等。我不建议将连接保持为全局变量或类似的东西


当然,如果您使用的是LINQ to SQL之类的工具,那么连接处理可能主要是为您完成的。

假设您使用的是.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)您没有完成,2)应用程序中用户“本可以完成”的先前区域没有清理。有些人说最好关闭并再次打开它,那么我们应该怎么做this@xQbert:你能给我解释一下第2个问题吗?谢谢上面的第2个问题:这里的重点是清理应该在最初创建和使用连接的代码中完成。如果我有一个函数对数据库进行多次调用,那么在该函数中打开和关闭数据库是不必要的,它的开销会降低性能。但是,我应该确保在函数结束之前关闭它并销毁连接对象;即使我的函数导致错误,连接对象也需要销毁。如果我不这样做,我希望垃圾收集可以清理我留下的垃圾;这可能会导致我提到的内存泄漏。你为什么要关闭一个连接而只需再次打开它呢?实际上,这种做法是在“完成”连接后关闭它,以留下更小的内存占用并减少内存泄漏。在执行另一个连接之前关闭连接意味着1)您没有完成,2)应用程序中用户“本可以完成”的先前区域没有清理。有些人说最好关闭并再次打开它,那么我们应该怎么做this@xQbert:你能给我解释一下第2个问题吗?谢谢上面的第2个问题:这里的重点是清理应该在最初创建和使用连接的代码中完成。如果我有一个函数对数据库进行多次调用,那么在该函数中打开和关闭数据库是不必要的,它的开销会降低性能。但是,我应该确保在函数e之前关闭它并销毁连接对象