Можно создать дубликат:
Entity framework 4 not closing connection in sql server 2005 profilerПочему мой оператор использования не закрывает соединение?
Ну, много разработчиков на StackOverflow говорят, что я не должен беспокоиться, чтобы закрыть мое подключение: мой используя оператор закрывает соединение для меня, here и here и по всему сайту. К сожалению, я этого не вижу. Вот мой код:
[Test, Explicit]
public void ReconnectTest()
{
const string connString = "Initial Catalog=MyDb;Data Source=MyServer;Integrated Security=SSPI;Application Name=ReconnectTest;";
for (int i = 0; i < 2000; i++)
{
try
{
using (var conn = new SqlConnection(connString))
{
conn.Open();
using (var command = conn.CreateCommand())
{
command.CommandText = "SELECT 1 as a";
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
}
//conn.Close();
// optional breakpoint 1 below
}
}
catch(SqlException e)
{
// breakpoint 2 below
Console.WriteLine(e);
}
// breakpoint 3 below
}
}
Когда я включаю все контрольные точки и начать свой тест, то первая итерация успешно, и я ударил точку останова 3. На этом этапе соединение остается открытым: Я вижу его в Profiler, и sp_who2 выводит его тоже.
Предположим, что в это время я выхожу на обед, и моя связь простаивает. Таким образом, наш производственный сервер убивает его. Чтобы подражать этому, я убиваю соединение с SSMS.
Итак, когда я ударил F5 и запустил вторую итерацию, мое соединение убито. К сожалению, он не открывается автоматически, поэтому ExecuteNonQuery выдает следующее исключение: «произошла ошибка транспортного уровня». Когда я запускаю третью итерацию, мое соединение действительно открывается: я рассматриваю это как событие в Profiler, и sp_who2 выводит его также.
Даже когда у меня была раскованная моя команда conn.Close(), соединение все еще не закрывается, и когда я убью его из SSMS, следующая итерация все еще взрывается.
Что мне не хватает? Почему нельзя использовать оператор close my connection? Почему нельзя открыть() на самом деле открыть его в первый раз, но в следующий раз удастся?
Этот вопрос возник из my previous one
[Пул соединений] (http://msdn.microsoft.com/en-us/library/8xx3tyca (v = vs.80) .aspx) – Blorgbeard
Это предполагаемое поведение. Читайте о [повторное использование соединения/объединение] (http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx) –