可能重複:
Entity framework 4 not closing connection in sql server 2005 profiler爲什麼我的使用語句不關閉連接?
好了,很多對計算器的開發者說,我不應該擔心收我的連接:我使用的語句將關閉我的連接,here和here和遍佈整個網站。不幸的是,我沒有看到它發生。這裏是我的代碼:
[Test, Explicit]
public void ReconnectTest()
{
const string connString = "Initial Catalog=MyDb;Data Source=MyServer;Integrated Security=SSPI;Application Name=ReconnectTest;";
for (int i = 0; i < 2000; i++)
{
try
{
using (var conn = new SqlConnection(connString))
{
conn.Open();
using (var command = conn.CreateCommand())
{
command.CommandText = "SELECT 1 as a";
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
}
//conn.Close();
// optional breakpoint 1 below
}
}
catch(SqlException e)
{
// breakpoint 2 below
Console.WriteLine(e);
}
// breakpoint 3 below
}
}
當我讓所有的斷點,並開始我的測試,在第一次迭代成功,和我打了斷點3.此時,連接仍然是開放的:我看到它的探查,並且sp_who2也輸出它。
讓我們假設在這個時候我出去吃午飯,而我的連接是空閒的。因此,我們的生產服務器將其殺死。爲了模仿它,我正在扼殺SSMS的聯繫。
因此,當我點擊F5並運行第二次迭代時,我的連接被終止。不幸的是,它不會自動重新打開,因此ExecuteNonQuery將引發以下異常:「發生傳輸級錯誤」。當我運行第三次迭代時,我的連接實際上打開了:我將其視爲Profiler中的事件,並且sp_who2也將其輸出。
即使當我取消註釋我的conn.Close()命令時,連接仍然沒有關閉,並且當我從SSMS中取消它時,下一次迭代仍然爆炸。
我錯過了什麼?爲什麼不能使用語句關閉我的連接?爲什麼不能Open()實際上第一次打開它,但下一次成功?
當你調用SqlConnection.Dispose()
,你因爲using
塊呢,連接不會關閉,每本身這個問題,源自my previous one
[連接池](http://msdn.microsoft.com/en-us/library/8xx3tyca(v = vs.80).aspx) – Blorgbeard 2012-02-03 18:21:28
這是一個預期的行爲請閱讀[連接重用/池]( http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx) – 2012-02-03 18:23:30