Tru*_*erG 5 c# sql-server connection-string timeout transactions
我Transaction Binding=Explicit Unbind在这里建议使用连接字符串,因为我也使用TransactionScope超时.问题是连接在处理后似乎没有关闭,最终连接池中没有可用的连接.当我修改TransactionTimeoutIssueDemo(请参阅链接)并在循环中运行TransactionScopeTest()(使用显式的unbind连接字符串)足够多次以使用连接池中的所有可用连接时,我得到了相同的结果.池中连接的默认值为100,但可以使用该设置更改此值Max Pool Size =10.使用显式解绑绑定时似乎不会释放连接,即使SqlConnection和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;
}
}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,事务将在超时内完成,一切都会很好。当事务实际超时时,您将清除池以清理不会重用的脏连接。这当然会影响池中不受此问题影响的其他连接。
这是一个丑陋的解决方法,但似乎有效。