OracleConnection生命周期

时间:2013-06-17 10:41:47

标签: c# database-connection odp

我在我的数据库应用程序上使用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 个答案:

答案 0 :(得分:1)

这下面的重要问题是:ODP OracleConnection是否实现了连接池?如果它 (以及许多ADO.NET提供者),那么“最佳实践”代码绝对正确;它可能看起来就像你正在打开一个连接,但是连接池Open()实际上是“从池中获取底层连接,或者如果没有可用连接则连接”。 Dispose()(在using末尾)将底层连接释放回池中。有了这种方法,那么不需要来跟踪连接的状态 - 你让游戏池担心这一点。

默认情况下,在ODP中启用了连接池,并使用连接字符串参数进行调整(source