我有以下代码,如果我在最后使用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;
}
}发布于 2010-04-27 02:08:56
首先,考虑使用using,其次,让框架来处理处理。managed providers将根据连接字符串进行池化。
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();
}
} 发布于 2010-04-27 02:09:40
在Garbage Collection.
您可以使用以下代码执行相同的操作。结果也是一样的。无论错误是否关闭,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();
}
}正如您所看到的,当您想要/需要的唯一错误处理是确保正确地处理您的连接对象时,Using语法可以使事情变得整洁。
发布于 2010-04-27 02:08:36
将其设置为null是多余的,因为它无论如何都会在函数结束时超出作用域。是的,如果您这样做了,您仍然在使用连接池。
https://stackoverflow.com/questions/2715714
复制相似问题