Мой объект .Net SqlConnection закрывается сам по себе - PullRequest
0 голосов
/ 25 мая 2011

У нас есть простой циклический процесс, который делает некоторые вещи для некоторых датаров.

При фиксации изменений новая строка и объект SqlConnection передаются методу, который обрабатывает изменение или добавление строки.

Процесс выполняется 5 раз из 10, все в порядке. SqlConnection открывается в начале цикла и закрывается после цикла, однако иногда он действительно закрывается во время цикла. Код не вызывает close () в любой точке цикла.

Итак, мои вопросы, почему он может закрыться сам по себе.

Приветствия

Для справки код похож на следующий

connection.Open();

foreach(DataRow row in rows)
{
  if(rubbish)
{
   //make some changes and save
   DatabaseConnector.Save(sqlStringToExecute, connection);
}
}

connection.Close();

1 Ответ

1 голос
/ 25 мая 2011

Соединение не закроется само по себе, нет. Основное время закрытия соединения:

  • удаление (например, с помощью оператора using)
  • явный вызов Close()
  • команда выполняется с поведением CommandBehaviour.CloseConnection
  • сборка мусора - вроде бы (хотя это немного другое, правда)
  • сервер перестает быть доступным

Первое очень возможно, если вы на самом деле получаете исключение (может быть, тайм-аут или тупик), прыгаете через блок using (утилизируете его) и, возможно, проглатываете исключение.

Третий очень возможен в доброжелательном коде.

Для расследования вы можете подписаться на событие StateChange и добавить точку останова в обработчик; затем пройдите назад по трассировке стека и вы точно будете знать , кто его закрывает и почему. Если вы используете соединение, выходящее за рамки этого кода, не забудьте также отписаться.

...