Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 коннекция закрывается на стороне сервера  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
есть такая проблема:
приложение и по кнопке идет выборка данных по простому запросу.

Далее, я иду в SSMS и убиваю процесс, и потом снова жму выполнить запрос
В этом случае почти всегда

// в этом месте состояние коннекции - Open
                if(connection.State != ConnectionState.Open)
                {
                    connection.Open();
                }
                using (SqlDataReader reader = command.ExecuteReader())
                {
// при выполнении улетает на эксцепцию с сообщением:

A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)</Message>
<StackTrace>

и состояние Closed.

как бороться?
11 ноя 09, 18:09    [7916095]     Ответить | Цитировать Сообщить модератору
 Re: коннекция закрывается на стороне сервера  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36799
Вы прикалываетесь? Вы сами грохаете коннект на стороне сервера, а потом удивляетесь, что коннект на стороне клиента Closed?
11 ноя 09, 18:10    [7916102]     Ответить | Цитировать Сообщить модератору
 Re: коннекция закрывается на стороне сервера  [new]
Влом регистрироваться
Guest
Winnipuh
// в этом месте состояние коннекции - Open
                if(connection.State != ConnectionState.Open)
                {
                    connection.Open();
                }
                {


connection узнает, что разорвался, только когда выполнит обращение к сиквелу. А до этого State так и будет оставаться Open. Если хотите сделать автоматический реконнект, то выполняйте что-то типа (очень грубо, только чтобы показать идею)


void PingConnection(SqlConnection connection)
{
      try
      {
              if (connection.State == ConnectionState.Open)
              {
                       connection.ChangeDatabase(new SqlConnectionStringBuilder(connection.ConnectionString).InitialCatalog);
              }
      }
      catch(SqlException t)
      {
              // разбираемся, что за ошибка, связана ли она с потерей соединения
      }
      finally
      {
              if (connection.State != ConnectionState.Open)
              {
                     connection.Open();
              }

      }
}

12 ноя 09, 07:35    [7917711]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить