Являются ли эти два соединения ADO.NET то же самое (с включенным объединением пулов соединений)?

#c# #.net #.net-core #ado.net

#c# #.net #.net-ядро #ado.net

Вопрос:

Есть ли проблема со вторым использованием (фрагмент кода 2)? Если да, то в чем проблема?

 // ---Code snippet 1---
IDbConnection connection = new SqlConnection(connStr)
using(connection)
{
    connection.Open(); // Open a connection in “using”
    todo...
}


// ---Code snippet 2---
IDbConnection connection = new SqlConnection(connStr)
connection.Open(); // Open a connection outside “using”
using(connection) 
{ 
    todo...
}
 

Ответ №1:

using Инструкция — это просто встроенная языковая поддержка для правильной обработки IDisposable объектов, с ее помощью вы можете убедиться, что ваши одноразовые объекты будут удалены, когда они должны быть.

В основном это переводится в пару try-finally с вызовом dispose в блоке finally. Подробнее об инструкции using вы можете прочитать здесь.

Тем не менее, вы должны поместить using ключевое слово в первую инструкцию, в которой вы создаете одноразовый объект, чтобы правильная версия вашего кода была:

 using (var connection = new SqlConnection(connStr))
{
    connection.Open(); // Open a connection in “using”
    todo...
}
 

Я не думаю, что размещение ключевого слова using имеет какое-либо значение для того, что делает или выглядит объект connection.

Комментарии:

1. Или, другими словами: обе версии в вопросе неверны