Если я перехватываю исключения внутри оператора using для SqlConnection, обрабатывает ли использование все еще закрытие и удаление моего соединения? - PullRequest
1 голос
/ 22 февраля 2010

Я просматриваю некоторый старый код C # .NET в приложении ASP.NET, чтобы убедиться, что все SqlConnections заключены в с использованием блоков.

Этот фрагмент кода используется для открытия cn и da и закрытия и размещения их как в блоке catch , так и в конце метода. Я добавил usings и не могу точно определить, что блоки , использующие , все еще обрабатывают удаление соединения, если исключение выдается в try и перехватывается в улове . Этот вопрос , по-видимому, наводит на мысль.

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;
        }
    }
} 

Ответы [ 2 ]

3 голосов
/ 22 февраля 2010

Да, они будут. Они в основном превращены в finally блок.

Так что-то вроде этого:

using (SqlConnection cn = new SqlConnection(Global.sDSN))
{
....
}

действительно превращается в:

SqlConnection cn = new SqlConnection(Global.sDSN)
try
{
....
}
finally
{
    cn.Dispose();
}

более или менее - и блок finally выполняется всегда независимо от того, что могло случиться раньше в блоке try {.....}.

1 голос
/ 22 февраля 2010

Когда вы используете предложение using, это то, что происходит:

myobject = new object();
try{ 
   // do something with myobject
}finally{
   myobject.Dispose();
}

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...