1

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

例如,在这个片段中

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使用事务中使用的连接调用时的行为。

4

1 回答 1

2

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

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

于 2013-04-14T16:13:25.103 回答