SqlConnection的行为.带有事务的ClearPool



如果我传递事务中使用的连接作为参数(例如使用System.Transactions.TransactionScope), SqlConnection.ClearPool的行为是什么?

例如,在这个代码片段

using(var tx=new System.Transactions.TransactionScope())
{
  var sqlConn=new System.Data.SqlClient.SqlConnection(...);
  /*do something with connection*/
  System.Data.SqlClient.SqlConnection.ClearPool(sqlConn);
  tx.Complete();
}

ClearPool调用我清除所有连接与相同的连接字符串(不管事务)或实际上我只关闭连接我传递(因为它是"关联"与事务)?

我在网上搜索,但我什么也没找到。从MSDN(这里和这里)可以清楚地看到没有交易的行为;此外,我明白,如果我在一个事务中,连接池试图给我之前在该事务中使用的连接(如果它仍然存在)。但是,我不清楚ClearPool在事务中使用连接调用时的行为。

因为我没有找到关于这个特定场景的任何官方文档,所以我实现了一个模拟这个场景的小示例(可从https://github.com/edymtt/sqlclientconnectionpool获得)。在运行这个示例之前要做的重要事情是在测试机器上停止MS DTC——这样我们就不会处理分布式事务,也不会错过创建新的SqlConnection

通过这种方式,我发现SqlConnection.ClearPool清除了所有具有作为参数传递的连接的相同连接字符串的连接,无论与该连接关联的任何事务。

相关内容

  • 没有找到相关文章

最新更新