我在連接字符串中使用Transaction Binding=Explicit Unbind
作爲建議here因爲我也使用TransactionScope超時。問題在於連接在處置後似乎並沒有關閉,並且最終在連接池中沒有更多連接可用。當我修改TransactionTimeoutIssueDemo(請參閱鏈接)並在循環中運行TransactionScopeTest()(使用顯式的非綁定連接字符串)足夠多次以用完連接池中的所有可用連接時,我得到了相同的結果。池中連接的默認值爲100,但可以通過使用設置Max Pool Size =10
進行更改。看起來,即使SqlConnection和TransactionScope與using
子句一起使用,在使用顯式解除綁定時連接也不會被釋放。任何人都知道如何處理這個?使用Transaction Binding = Explicit Unbind時連接不會關閉;在連接字符串
5
A
回答
3
連接似乎只停留在池中,並且在出現異常時不會重用,就像示例一樣。如果增加超時時間,連接將被重新使用。
一種解決這個問題的方法來清除連接池的情況下,你會得到這樣一個例外:
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;
}
}
在大多數情況下,該交易將在超時時間內完成,一切都會好得很。當事務實際上做超時您清除池以清理不會重用的髒連接。這當然會影響池中不受此問題影響的其他連接。
這是一個醜陋的解決方法,但它似乎工作。
0
對於它的價值,這個問題在.Net 4.0中得到了修復。
相關問題
- 1. 套接字連接不會關閉?
- 2. 連接不會關閉(VB)
- 3. 在C#中使用字符串連接的字符串連接
- 4. 關閉套接字連接
- 5. 使用連接字符串
- 6. 在使用連接池時關閉連接的位置?
- 7. c3p0連接池不關閉連接
- 8. Lua字符串將不會連接
- 9. c3p0連接池充分事件連接關閉時關閉
- 10. 底層連接已關閉:連接意外關閉 - wcf
- 11. C#字符串將不會連接
- 12. 關閉連接
- 13. 底層連接已關閉:連接意外關閉wcf
- 14. hibernate spring不關閉連接
- 15. 超時:底層連接已關閉:連接意外關閉
- 16. 用PHP關閉套接字連接
- 17. 基礎連接已經關閉:連接被關閉意外
- 18. C# - SQL連接不會關閉
- 19. 當不能連接到第一個連接字符串時,C#更改爲不同的連接字符串
- 20. 休眠:關閉會話工廠不關閉c3p0連接池
- 21. mysql_pconnect()連接何時關閉
- 22. 字符串連接
- 23. 連接字符串
- 24. 連接字符串
- 25. 連接字符串
- 26. 什麼時候連接的UDP套接字會被OS關閉?
- 27. 字符串連接
- 28. 連接字符串
- 29. ASP.NET連接字符串和DSN連接
- 30. 使用Dapper時的關閉連接