ADO.NET использует пул соединений, поэтому он автоматически использует уже открытое соединение, даже если вы думаете, что открываете новое соединение.Имея это в виду, на самом деле нет никакой причины передавать соединение через ваш код (как параметр).Это сделает ваш код намного чище с той же производительностью, что и при передаче соединения в качестве параметра.
Подробнее здесь
Также (и это действительно важно)Пожалуйста, используйте ключевое слово "using".Таким образом, вам не придется разбираться с закрытием соединения и очисткой, потому что ваш код в том виде, в котором он написан сейчас, не имеет отношения к закрытию соединений, поэтому в случае какого-то исключения вы можете столкнуться с достижением ограничения на числоваш сервер.Выполните что-то вроде этого:
using(var connection = new SqlConnection(<connection_string>))
{
connection.Open();
using(var command = connection.CreateCommand())
{
}
}
Как видите, нет необходимости вызывать connection.Close () или обрабатывать исключения и закрывать соединение в вашем блоке finally
, потому что это"job" для блока "using".
Кроме того, одно важное замечание ... транзакции не передаются с помощью опроса соединения, поэтому, если вы хотите сохранить транзакцию при вызове метода, вам придется передать свойсвязь (и это единственная причина, по которой я могу думать, почему вы должны это делать).