我正在检查ASP.NET应用程序中的一些旧C#.NET代码,以确保所有SqlConnections都使用块包装。
这段代码用于打开cn和da,然后将它们关闭并放置在catch块和方法末尾。我添加了usings,如果在try中抛出异常并捕获到异常中,则using块无法确定连接块是否仍能处理连接。 This question似乎暗示确实如此。
using (SqlConnection cn = new SqlConnection(Global.sDSN))
{
using (SqlDataAdapter da = new SqlDataAdapter())
{
// do some stuff
try
{
// do stuff that might throw exceptions
}
catch (catch (System.Exception e)
{
//return something here
// can I ditch these because the using's handle it?
da.Dispose();
cn.Close();
cn.Dispose();
return msg;
}
}
}
最佳答案
是他们会。它们基本上变成了finally
块。
所以像这样:
using (SqlConnection cn = new SqlConnection(Global.sDSN))
{
....
}
真的变成了:
SqlConnection cn = new SqlConnection(Global.sDSN)
try
{
....
}
finally
{
cn.Dispose();
}
或多或少-无论在
try {.....}
块中之前发生过什么,始终执行finally块。