我有以下代码,如果我最后使用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;
}
}
答案 0 :(得分:6)
首先,考虑使用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();
}
}
答案 1 :(得分:4)
您不需要在.NET中将任何内容设置为null或任何内容。这由Garbage Collection自动处理。
您必须在错误处理中调用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();
}
}
正如您所看到的,当您想要/需要的唯一错误处理是确保正确处理您的连接对象时,使用语法可以使事情变得整洁。
答案 2 :(得分:0)
将其设置为null是多余的,因为它会在函数结束时超出范围。是的,如果你这样做,你仍在使用连接池。
答案 3 :(得分:0)
您可以处置您的对象并仍然使用池。
还有它的
然后处理这个对象会对你有帮助,因为垃圾收集器通常无法保持足够的性能来保存你的性能。