我应该在每次要使用它时创建一个全新的SqlConnection,还是每次都尝试重新打开现有连接?

时间:2016-07-18 15:46:45

标签: c# sql-server

我有一个长期运行的.NET进程(Windows服务),它与SQL Server通信。

最初,我在服务启动时打开了一个连接,并保持打开状态。但是,偶尔网络打嗝或重启SQL Server会破坏该连接,我的过程也不会知道这一点。它会尝试继续针对已关闭的连接抛出SQL。

试图保持这样的开放式连接显然是我试图过于聪明。那么,我:

  1. 每次创建(并打开)一个新的SqlConnection对象
  2. 在服务启动时创建一次连接,并且每次尝试重新打开连接
  3. 对于后者(#2),我有这段代码:

    if(connection.State != ConnectionState.Open)
    {
      connection.Open();
    }
    

    我只需要这样做,因为连接已经存在。如果我每次创建连接都是新鲜的(#1),显然它将被关闭,我需要打开它。

    我希望做的是利用SQL连接池来实际每次都打开一个新连接,但只是让连接池管理它 - 给我一个开放的当它有一个时连接,或者当它没有时打开一个新的连接。

    为了实现这一点,每次创建连接时是否重要(#1),或者我只是重用连接并尝试每次都重新打开它(#2)?

1 个答案:

答案 0 :(得分:2)

连接池意味着即使你做(1),在框架下,框架也会为你做(2)以提高性能。因此,您可以随时创建新连接。

值得指出的是,在大多数情况下,池只适用于相同的连接字符串。因此,如果您更改某些选项,则可能不会合并这些连接。