Да, конечно. Если что-либо находится в блоке ПОСЛЕ того, как предложение using генерирует исключение, соединение будет закрыто. Единственный способ, которым блок finally не будет выполнен, - это если «new SqlConnection (...)» выбрасывает, но в этом случае у вас фактически не будет действительного открытого соединения для закрытия. Так что все в порядке.
веденном ниже примере соединение закрывается и удаляется при возникновении исключения, если оно находится в пределахusing
заявление?
using (var conn = new SqlConnection("..."))
{
conn.Open();
// stuff happens here and exception is thrown...
}
Я знаю, что приведенный ниже код будет гарантировать, что это так, но мне любопытно, как это делает оператор using.
var conn;
try
{
conn = new SqlConnection("...");
conn.Open();
// stuff happens here and exception is thrown...
}
// catch it or let it bubble up
finally
{
conn.Dispose();
}
Связанный:Как правильно обеспечить закрытие соединения SQL при возникновении исключения?