c# - ODP.NET连接池: How to tell if a connection has been used

标签 c# oracle connection-pooling odp.net

我正在修改 Winforms 应用程序以使用连接池,以便数据访问可以在后台线程中进行。业务逻辑是在 PL/SQL 中实现的,并且必须调用几个与安全相关的存储过程才能使用业务逻辑。

我需要的是一种方法来判断连接是否已被使用,而无需往返数据库。我认为我无法在 HashSet 中跟踪它们,因为我怀疑 Equals 甚至 ReferenceEquals 是否可靠。有什么想法吗?

编辑:

需要明确的是,我计划使用 ODP.NET 的内置连接池机制。如果我推出自己的连接池,那么跟踪哪些连接是新的、哪些是已使用的将非常简单。

最佳答案

ODP.NET 提供的连接池是完全不透明的。也就是说,它并没有像我希望的那样泄漏 - 无法知道连接是否以前使用过或者是全新的。然而,从另一种角度来说,它是一个有漏洞的抽象:任何 session 状态(例如,包范围的变量,它们是 session 范围的)在连接的使用之间都被保留。由于这是一个关于在不访问数据库的情况下确定连接的已用状态与新状态的问题,答案是使用 ODP.NET 的内置连接池根本无法完成此操作。

剩下两个选择:

  1. 创建一个连接池实现,该实现可以提供该信息或在创建每个新连接时执行用户定义的初始化;或
  2. 执行数据库往返以确定连接的已使用状态和新状态。

关于c# - ODP.NET连接池: How to tell if a connection has been used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7845559/

相关文章:

php - 我应该在哪里提交事务——在存储过程中还是在调用应用程序代码中?

Sql 查询以查找只有一行的行(对于 exp 许可证)

java - 基础 - 排除 Hibernate/JDBC 连接池问题

mongodb - 将 MongoDb 连接池与 Go 应用程序一起使用

C# WPF 上下文菜单项单击事件返回 null

c# - 获取 "cannot assign to ' 回复'因为在 Outlook 加载项中添加事件时方法组

c# - MediaComposition.RenderToFileAsync 因许多静态图像而崩溃

c# - XML 序列化是否需要读/写属性?

java - 为什么 Oraoop 1.6 在分配内存块之前要等待 1.5 分钟?

java - 在 MySQL 中一起使用准备好的语句和连接池