Не будет никаких работ по обслуживанию Express Edition, если я не написал это. Что я не сделал.

i иться объект SqlConnection, но, конечно,это не совсем закрыто, Мне нужно закрытое соединение, чтобы не удерживать блокировки на объектах базы данных. Как я могу предотвратить закрытые соединения от удержания замков?

Объяснение вышеупомянутой отправки для тех, кто не знает:

Закрывая соединение ADO или ADO.NET, вы фактически не разрываете соединение с SQL Server. Инфраструктура ADO / ADO.NET поддерживает соединение на случай, если вы захотите использовать его снова. Соединения сохраняются в так называемом «пуле соединений».

После нескольких минут неиспользования соединение будетфактически закрыто. Хотя, не совсем. У TCP / IP есть свой собственный способ держать TCP-соединения открытыми еще несколько минут (вCLOSE_WAIT"state). Это делается в том случае, если вы снова запросите TCP-соединение с тем же IP: Port. Если это так, он может использовать уже открытое TCP-соединение.

При использовании пула соединений и SQL Server соединение все еще установлено с SQL Server. Каждое соединение имеет контекст базы данных, в котором оно находится. Пока соединение находится в этой базе данных: оно поддерживает блокировку общей базы данных (S-DB) в этой базе данных.

Блокировка общей базы данных просто означает: «Не удаляйте эту базу данных, пока я в ней, пожалуйста».

Как я могу предотвратить удержание общей блокировки намой базы данных, сохраняя при этом преимущества пула соединений?

Мое специальное решение прямо сейчас каждый раз, когда разработчик называется Dispose:

connection.Dispose()

измените его на вызов глобальной вспомогательной функции:

Database.DisposeConnection(connection);

который изменяет контекст базы данных намастер:

public static void DisposeConnection(SqlConnection connection)
{
    //Stop holding a database lock - in my database at least
    ADOHelper.ExecuteNonQuery(connection, "USE master");

    connection.Dispose();
}

Это решает мою непосредственную проблему; закрытые соединения не удерживают блокировкумой база данных.

Но теперь я беспокоюсь, что у пула соединений будет зашифрован мозг - потому что я переключил контексты базы данных за его спиной.

Если кто-то не знал или думал иначе:

ИзSDK:

близко а такжеизбавиться функционально эквивалентны.

Ответы на вопрос(5)

Ваш ответ на вопрос