OracleConnection жизненный цикл
Я использую ODP
на моем приложении БД. Я создал классы-оболочки над ODP
для моего приложения. Это приложение для настольного компьютера, оно работает линейно (пользователь не может выполнять никакие другие операции во время выполняемой операции. GUI блокируется во время выполнения операций). Учитывая это, я создал один OracleConnection
объект в качестве члена и использование его для всех запросов. Но, как я вижу, лучшая практика - это использование чего-либо. лайк:
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = connection.CreateCommand();
command.CommandText = "mysp_GetValue";
command.CommandType = CommandType.StoredProcedure;
connection.Open();
object ret = command.ExecuteScalar();
}
во всех случаях (даже в линейном исполнении).
Должен ли я использовать как это или холост OracleConnection
довольно?
Теперь я вызываю соединение моего объекта-обертки, и он вызывает m_OracleConnection.open(connectionString)
пока приложение запускается. Но если я создам отдельное соединение для каждого запроса, как я буду хранить состояние соединения? Будет ли логическое значение как bool m_IsConnected
быть достаточным?
И как я могу предупредить пользователя, если соединение потеряно мягким или сложным способом?
1 ответ
Важный вопрос под этим: действительно ли ODP OracleConnection
реализовать пул соединений? Если это произойдет (и многие поставщики ADO.NET делают), то код "наилучшей практики" абсолютно подходит; может показаться, что вы открываете соединение, но с пулированием Open()
на самом деле "получить базовое соединение из пула или подключиться, если его нет". Dispose()
(в конце using
) освобождает базовое соединение обратно в пул. Таким образом, при таком подходе нет необходимости отслеживать состояние соединения - вы позволяете пулу беспокоиться об этом.
Похоже, пул соединений включен в ODP по умолчанию с параметрами строки соединения для его настройки ( источник)