2015-09-29 3 views
3

соединения, что мое приложение использует для подключения к БД следующее:Как отключить пул соединений? Строка

private const string oradb = "Data Source=(DESCRIPTION=(ADDRESS_LIST=" 
        + "(ADDRESS=(PROTOCOL=TCP)(HOST=host.name)(PORT=1521)))" 
        + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=service.name)));" 
        + "User Id=myusername;Password=mypass;"; 

Во всех точках доступа DB моего приложения я использую следующий шаблон:

 OracleConnection conn = new OracleConnection(oradb); 

     try 
     { 
      Console.WriteLine("Opening DB Connection..."); 
      conn.Open(); 

      string queryString = string.Format(@"SELECT ..."); 

      using (OracleCommand command = new OracleCommand(queryString, conn)) 
      { 
       using (OracleDataReader reader = command.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
        ... 
        } 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Exception occured during DB access: {0}", e.Message); 
      dbr.Error = e.Message; 
     } 
     finally 
     { 
      Console.WriteLine("Closing DB connection"); 
      conn.Close(); 
      conn.Dispose(); 
     } 

Наверняка я правильно обрабатывать исключения и в try/catch/finally закрытие и размещение объекта связи. Тем не менее, часто я получаю сообщение службы оракула, что я занимаюсь сессиями оракула. Более того, если я просто оставлю свое приложение открытым и на следующий день попытаюсь выполнить операцию, я получаю первый случай ora-12537 network session end of file, а затем вторая попытка. После некоторого чтения мне кажется, что мне нужно отключить пул соединений. Если это правильный способ решить, как отключить пул? Если нет, то какая другая вещь может быть неправильной?

+0

Не совсем то, что вы просили, но ... 'OracleConnection.ClearPool (conn);' –

+0

Где мне это нужно? Могу ли я указать строку подключения, чтобы не использовать пул? – Pablo

+0

Не знаю, отсюда комментарий, а не ответ. Я думаю, что вы можете очистить пул после 'Close()' –

ответ

7

В строке подключения вы можете добавить Pooling=False, но это означает, что каждый раз создается новое соединение.

+ "User Id=myusername;Password=mypass;Pooling=False;"; 

Взгляните на эту article, это могло бы помочь с вашей проблемой. Кроме того, взгляните на эту страницу, в частности, Using Connection Pooling раздел

+0

Невозможно использовать пул и не оставлять открытые сеансы на сервере, не так ли? – Pablo

+0

@Pablo какие открытые сессии на сервере? В пуле соединений нет ничего плохого, на самом деле он * сокращает * сеансы за счет повторного использования * соединений *. Пул соединений является одним из наиболее важных механизмов масштабируемости. Вы уверены, что не пытаетесь решить неправильную проблему? –

+0

Я получаю автоматические сообщения электронной почты от oracle, сообщая, что у меня есть сеанс (ы). Однако все мои транзакции происходят в течение нескольких секунд, заканчивающихся закрытием/удалением соединения. – Pablo

Смежные вопросы