当我使用System.Data.SqlClient.SqlConnection
时,有一种静态方法可用:
System.Data.SqlClient.SqlConnection.ClearPool(connection);
即使OleDbConnection
拥有(或拥有)方法:ReleaseObjectPool()
,这似乎与同样的事情有关。
但我使用的是基础DbConnection
,我无法找到一种免费连接/资源的等效方法。有办法吗?
答案 0 :(得分:2)
虽然提供.NET平台的ADO.NET提供程序本身在System.Data
(DbConnectionPool
)内部使用共享代码,但没有与提供程序无关的连接池。给定DbConnection
,您无法知道它是否来自池。 ADO.NET提供程序不需要池连接,但当然大多数都是出于性能原因。所以对你的问题的字面答案是“不,你不能清除任何给定DbConnection
的池,因为它不需要来自池”。
当然,您可以测试DbConnection
的特定类型,并调用特定于提供程序的方法(如果有)。既然你已经知道你遇到问题的提供者(Pervasive.SQL)和你知道你有一个特定于提供者的问题,需要(或似乎需要)清理池(肯定是不是你想要做的事情)这种测试类型的要求似乎并不太繁重。
如果您的客户端代码已经使用了通用DbConnection
(或更好的IDbConnection
),您可以编写返回具有所需行为的连接的包装器,但由于层次结构,这可能会有相当多的工作涉及(你可能最终必须包装像IDbCommand
这样的东西以使Command.Connection = myConnection
工作,这样的事情)。只是分离数据层可能更容易。