我正在检查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块。

10-05 20:44
查看更多