【问题标题】:Start a new SqlConnexion for each query为每个查询启动一个新的 SqlConnexion
【发布时间】:2018-07-25 06:36:39
【问题描述】:

我是 WinForms .Net 的新手,我正在使用 Dapper 来处理 MySql 数据库。

我应该为每个查询启动一个新的SqlConnexion 还是只一个SqlConnexion 就足以满足整个应用程序的需求? (我从一开始就启动它,然后通过关闭应用程序来处理它)

最好的方法是什么?为什么?

【问题讨论】:

  • SqlConnexion 是什么意思?我不知道该名称的任何类别。如果您的意思是SqlConnection,请更正自己。但是,如果您使用这些,您就不是在与mysql 数据库交谈。或者这是您将遇到的下一个问题,因为它们仅适用于 sql-server。所以,请确定您实际使用的是什么并适当地编辑您的问题。
  • 我不同意关闭作为重复,因为我们在问题中只有“MySQL”、“SqlConnexion”和mysql。由于这些事情不存在和/或相互矛盾(正如我之前的评论已经指出的那样),我不同意(还)这是重复询问SqlConnection
  • @Damien_The_Unbeliever 虽然您的第一条评论中的观察结果是正确的,但我认为可以安全地假设 OP 正在使用 SQL 服务器和 SqlConnection,而不是母语为英语且不知道如何使用拼写连接(尝试忽略您对英语的了解并大声说出连接 - x 而不是 t 在这种情况下似乎是一个合理的选择)。更进一步 - 正确答案显然不应该受到这些细节的影响 - 所有 ado.net 连接对象的最佳做法是在使用完成后立即处理,返回到池中。

标签: c# mysql sql .net dapper


【解决方案1】:

正如 Damien 在对该问题的评论中所写,目前还不清楚您使用的是 MySql(因此,MySqlConnection)还是 Sql Server(正如问题中拼写错误的 SqlConnection 所暗示的那样)。

但是,该细节与答案无关,因为 SqlConnectionMySqlConnection 都实现了连接池 - 因此最佳做法是尽快关闭并处置它们。

连接池的基本概念是,ADO.Net 提供程序在您第一次使用它时会创建一个到数据库的连接,但是当您在应用程序中关闭连接时,ADO.Net 会保持底层连接处于活动状态,以便下次打开与数据库的连接时,您无需经历创建实际连接的所有开销 - ADO.Net 简单地重用现有连接。

Microsoft 建议在每次使用后关闭并处理 SqlConnection,因为这是底层连接返回池的唯一方式 - 从 SQL Server Connection Pooling (ADO.NET) 页面:

注意

我们强烈建议您在使用完毕后始终关闭连接,以便将连接返回到池中。您可以使用Connection 对象的CloseDispose 方法,或者通过在C# 中的using 语句或Visual Basic 中的Using 语句中打开所有连接来执行此操作。未明确关闭的连接可能不会添加或返回到池中。有关详细信息,请参阅使用语句或如何:处置 Visual Basic 的系统资源。

MySql documentation 还建议不要使用应用程序范围的连接。事实上,他们建议根本不要创建MySqlConnection 的实例,而是让MySqlCommand 为您管理连接,方法是使用将连接字符串作为参数的重载:

要按设计工作,最好让连接池系统管理所有连接。不要创建MySqlConnection 的全局可访问实例,然后手动打开和关闭它。这会干扰池的工作方式,并可能导致不可预测的结果甚至异常。

简化事情的一种方法是避免手动创建MySqlConnection 对象。而是使用将连接字符串作为参数的重载方法。使用这种方法,Connector/NET 将使用连接池系统自动创建、打开、关闭和销毁连接,以获得最佳性能。

【讨论】:

    【解决方案2】:

    您无需为每个查询启动新连接,因为该连接首先由 DBMS 和您的方法构建和维护。您所要做的就是首先使用简单的try catch 语法启动它,然后在您的程序中使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 2015-07-16
      • 1970-01-01
      相关资源
      最近更新 更多