有没有办法清除DbConnection的连接池?

时间:2016-03-31 12:27:33

标签: c# dbconnection

当我使用System.Data.SqlClient.SqlConnection时,有一种静态方法可用:

System.Data.SqlClient.SqlConnection.ClearPool(connection);

即使OleDbConnection拥有(或拥有)方法:ReleaseObjectPool(),这似乎与同样的事情有关。

但我使用的是基础DbConnection,我无法找到一种免费连接/资源的等效方法。有办法吗?

1 个答案:

答案 0 :(得分:2)

虽然提供.NET平台的ADO.NET提供程序本身在System.DataDbConnectionPool)内部使用共享代码,但没有与提供程序无关的连接池。给定DbConnection,您无法知道它是否来自池。 ADO.NET提供程序不需要池连接,但当然大多数都是出于性能原因。所以对你的问题的字面答案是“不,你不能清除任何给定DbConnection的池,因为它不需要来自池”。

当然,您可以测试DbConnection的特定类型,并调用特定于提供程序的方法(如果有)。既然你已经知道你遇到问题的提供者(Pervasive.SQL)你知道你有一个特定于提供者的问题,需要(或似乎需要)清理池(肯定是不是你想要做的事情)这种测试类型的要求似乎并不太繁重。

如果您的客户端代码已经使用了通用DbConnection(或更好的IDbConnection),您可以编写返回具有所需行为的连接的包装器,但由于层次结构,这可能会有相当多的工作涉及(你可能最终必须包装像IDbCommand这样的东西以使Command.Connection = myConnection工作,这样的事情)。只是分离数据层可能更容易。