连接将不会关闭时使用的交易结合=明确的解除;连字符串
-
10-07-2019 - |
题
Im使用 Transaction Binding=Explicit Unbind
在连串的建议 在这里, 由于Im也使用TransactionScope与超时。问题是,这一连接,似乎并没有关闭之后,正在设置和最终没有更多的连接提供连接水池。我得到了同样的结果,当我修改了TransactionTimeoutIssueDemo(见的链接),并跑TransactionScopeTest()(明确的解除连接string)足够的时间在一个循环使用了所有可用连接的连接池。默认值连接在游泳池是100,但这是可以改变通过使用设置 Max Pool Size =10
为实例。它似乎是连接不会被释放时使用明确的解除,即使这两个和和TransactionScope用的 using
条款。任何人知道如何处理这个吗?
解决方案
在连接似乎只停留在游泳池的情况下,你会得到一个例外,就像例如不被重用。如果您增加超时连接将被重用。
一个解决此问题的是清除的情况下,你得到的连接池这样的异常:
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
try
{
Console.WriteLine("Server is {0}", con.ServerVersion);
Console.WriteLine("Clr is {0}", Environment.Version);
for (int i = 0; i < 5; i++)
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "insert into TXTEST values ( " + i + " )";
cmd.ExecuteNonQuery();
}
Console.WriteLine("Row inserted");
}
Thread.Sleep(TimeSpan.FromSeconds(1));
}
catch
{
SqlConnection.ClearPool(con);
throw;
}
}
在大多数情况下,该交易将在超时时间内完成,一切都会好得很。当交易的真正做到超时您清除池以清理,将不会得到重用脏连接。这当然会影响在不影响此问题池中的其他连接。
这是一个解决办法难看,但它似乎工作。
其他提示
有关它的价值,这个问题被固定在.NET 4.0中。
不隶属于 StackOverflow