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 по умолчанию с параметрами строки соединения для его настройки ( источник)

Другие вопросы по тегам