连接池

我有以下代码,如果我最后使用conn == null,我仍然使用连接池? 我知道关闭连接是一个好习惯但是如何处理整个连接对象呢?

public void ExecuteNonQuery(SqlCommand Cmd) { //========== Connection ==========// SqlConnection Conn = new SqlConnection(strConStr); try { //========== Open Connection ==========// Conn.Open(); //========== Execute Command ==========// Cmd.Connection = Conn; Cmd.CommandTimeout = 180; Cmd.ExecuteNonQuery(); } catch (Exception Exc) { throw Exc; } finally { //======== Closing Connection ========// if (Conn.State == ConnectionState.Open) { Conn.Close(); } //======== Disposing object ========// Conn = null; } } 

首先,考虑使用using ,其次,让框架处理。 托管提供程序将根据连接字符串进行池化。

 public void ExecuteNonQuery(SqlCommand Cmd) { //========== Connection ==========// using(SqlConnection Conn = new SqlConnection(strConStr)) { //========== Open Connection ==========// Conn.Open(); //========== Execute Command ==========// Cmd.Connection = Conn; Cmd.CommandTimeout = 180; Cmd.ExecuteNonQuery(); } } 
  • 您不需要在.NET中将任何内容设置为null或任何内容。 这是由垃圾收集自动处理的。

  • 必须在error handling中调用Conn.Dispose() ,并且如果一切按计划进行。 Try Catch Finally块非常适用于此。 另一种方法是在声明连接时使用Using关键字,以便Connection对象能够正确处理发生的任何事情。

  • 不要担心汇集你的连接。 如果你每次需要使用一个新的,那么这很好。 ADO.NET在幕后为您提供连接。 如果您重复使用相同的打开连接对象,则会有轻微的性能,但为了简单起见,请不要担心它。

您可以使用以下代码执行相同操作。 结果是一样的。 无论是否出错, Conn都将得到妥善处理。 任何错误都会像以前一样渗透。

 public void ExecuteNonQuery(SqlCommand Cmd) { Using (SqlConnection Conn = new SqlConnection(strConStr)); { //========== Open Connection ==========// Conn.Open(); //========== Execute Command ==========// Cmd.Connection = Conn; Cmd.CommandTimeout = 180; Cmd.ExecuteNonQuery(); } } 

正如您所看到的,当您想要/需要的唯一error handling是确保正确处理您的连接对象时,使用语法可以使事情变得整洁。

将其设置为null是多余的,因为它会在函数结束时超出范围。 是的,如果您这样做,您仍在使用连接池。

您可以处置对象并仍然使用池。

还有它的

  1. 托管应用程序
  2. 是一个Web应用程序
  3. 交通繁忙

然后处理对象会对你有好处,因为垃圾收集器通常无法保持足够的性能来保存你的性能。