我在我的数据库应用程序上使用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
这样的布尔值是否足够?
如果软连接或硬连接丢失,我如何警告用户?
答案 0 :(得分:1)
这下面的重要问题是:ODP OracleConnection
是否实现了连接池?如果它 (以及许多ADO.NET提供者做),那么“最佳实践”代码绝对正确;它可能看起来就像你正在打开一个连接,但是连接池Open()
实际上是“从池中获取底层连接,或者如果没有可用连接则连接”。 Dispose()
(在using
末尾)将底层连接释放回池中。有了这种方法,那么不需要来跟踪连接的状态 - 你让游戏池担心这一点。
默认情况下,在ODP中启用了连接池,并使用连接字符串参数进行调整(source)