【问题标题】:Is there an advantage to creating a new SQL connection for each query?为每个查询创建新的 SQL 连接是否有优势?
【发布时间】:2016-07-17 20:21:21
【问题描述】:

我正在尝试设计一个连接到 SQL 数据库的高效应用程序,我想知道为每个 SQL 查询创建 SQL 连接的优点/缺点是什么, 例如,像下面的代码一样,创建一个只设置一次连接的类,这样您就可以在类中需要它时调用它。

class SqlQuery
    {
        SqlConnection Connection = new SqlConnection(@myConnectionString);
          public void fillInfoData()
          {
              SqlCommand updateCommand = new SqlCommand(
                    @"my sql query", Connection);
              Connection.Open();
              updateCommand.ExecuteNonQuery();
              Connection.Close();
          }
    }

或者您应该为每个新查询创建一个新连接?

【问题讨论】:

    标签: c# sql sql-server


    【解决方案1】:

    您为每个查询打开一个连接,然后当您关闭它时,它会返回连接池,其余部分由框架管理

    因此您不必担心保持连接活动、超时等...

    MSDN 文章

    https://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx

    【讨论】:

    • 我不记得我在哪里读到的了,但是 Jon Skeet 建议你每次都创建一个新的连接。我想知道为什么?
    • @KyloRen 因为框架会为你处理连接管理
    • @KyloRen,由于连接池是每个应用程序域的,因此“迟开早关”模式更具可扩展性。这减少了数据库服务器以及类的多个实例上的资源使用。
    • @DanGuzman,那么我在 OP 中所做的被认为是好的编码吗?
    • @KyloRen,是的,除了连接成员变量应该是using 中的局部变量。这将允许您省略关闭。见stackoverflow.com/questions/4717789/…
    【解决方案2】:

    我认为他的意思不是保持一个打开的全局连接对象。但是您需要在需要时创建一个SqlConnection,执行该点所需的所有查询(每个查询不是一个连接),然后关闭连接。

    因此,如果您有一堆需要执行的查询,则不需要每个 sql 连接,但一个就足够了。但是,如果您在每次用户单击按钮时执行查询,最好在每次单击时打开一个连接,因为这样更容易管理关闭和释放连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多