Обработка различных состояний соединения перед открытием SqlConnection - PullRequest
5 голосов
/ 19 сентября 2008

Если вам нужно открыть SqlConnection перед выдачей запросов, можете ли вы просто обрабатывать все не-открытые состояния подключения одинаковым образом? Например:

    if (connection.State != ConnectionState.Open)
    {
        connection.Open();
    }

Я где-то читал, что для ConnectionState.Broken соединение должно быть закрыто до его повторного открытия. У кого-нибудь есть опыт с этим? * 1004 Благодарения и *

Ответы [ 3 ]

5 голосов
/ 19 сентября 2008

http://msdn.microsoft.com/en-us/library/system.data.connectionstate.aspx

Разорванное состояние соединения необходимо закрыть и открыть снова, прежде чем вы сможете продолжить его использование.

Редактировать: К сожалению, закрытие закрытого соединения также будет затруднено. Вам нужно проверить ConnectionState, прежде чем действовать на неизвестное соединение. Возможно, короткое переключение может помочь.

4 голосов
/ 19 сентября 2008

Это не дает прямого ответа на ваш вопрос, но рекомендуется открывать и закрывать соединение для каждого доступа к базе данных. ADO.NET пул соединений гарантирует, что это работает хорошо. Это особенно важно делать в серверных приложениях (например, ASP.NET), но я бы сделал это даже в приложении WinForms, которое напрямую обращается к базе данных.

Пример:

using(SqlConnection connection = new SqlConnection(...))
{
   connection.Open();
   // ... do your stuff here

}  // Connection is disposed and closed here, even if an exception is thrown

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

3 голосов
/ 21 сентября 2012

Вы можете справиться с этим так же. Я получал многочисленные состояния соединения == прервано при использовании IE9. В этом отношении в IE9 есть что-то принципиально неправильное, поскольку ни у одного браузера не было проблемы с нарушенными состояниями соединения после 5 или 6 обновлений таблиц базы данных. Поэтому я использую объектный контекст. В общем, просто закройте его и снова откройте.

У меня есть этот код до всех моих чтений и обновлений на логическом уровне businss:

if (context.Connection.State == System.Data.ConnectionState.Broken)
{
    context.Connection.Close();
    context.Connection.Open();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...