Microsoft Enterprise DAAB и закрытие подключений - PullRequest
0 голосов
/ 27 мая 2009

Я заметил, что одно из наших внутренних приложений использует DAAB, и похоже, что оно имеет какую-то утечку соединения. Мне показалось, что я где-то читал, что когда вы использовали следующий код:

Database db = DatabaseFactory.CreateDatabase("ConnectionString");
IDataReader rdr = db.ExecuteReader("sproc")

То, что соединение было закрыто для вас, поэтому я проверил, и это не так. Я не слишком знаком с DAAB, кто-нибудь знает наверняка, что происходит и когда? Кроме того, в том же приложении есть несколько классов, таких как:

public class Example
{
   private Database db;
   public Example ()
   {
      db = DatabaseFactory.CreateDabase("ConnectionString");
   }

   public void Update(object o)
   {
      try
      {
         db.ExecuteNonQuery("sproc", o.parameter);
      }
      catch...
      }
      }
   }
 }

Поначалу это кажется довольно привлекательным, но, как я уже сказал, я не знаком с DAAB. Могут ли эти классы вызывать утечку, если соединения не закрываются внутри DAAB?

Ответы [ 3 ]

1 голос
/ 27 мая 2009

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

Database db = DatabaseFactory.CreateDatabase("ConnectionString");
using (IDataReader rdr = db.ExecuteReader("sproc")) {
    // Use the data reader
}
1 голос
/ 31 июля 2010

Есть проблема с методом ExecuteReader из entlib 3.0. Это было исправлено для реализации области транзакции, но при обработке большого количества данных внутри транзакции произошла ошибка. Поэтому они исправили это, и эта проблема возникает в результате этого исправления. Поэтому вам придется закрывать соединение всякий раз, когда вы используете метод ExecuteReader. Лучше использовать его в блоке использования, как указано выше

0 голосов
/ 27 мая 2009

Я также исследую утечку, используя DAAB для базы данных Oracle - все выглядит нормально при использовании драйвера Microsoft, но я вижу проблемы при использовании поставщика Oracle Odp.net. Внутренне DAAB использует перечисление CommandBehavior для управления временем жизни соединения для методов ExecuteReader, но что-то не так с методами ExecNonQuery.

...