关闭后,为什么我的SqlConnection仍保留在SSMS进程列表中?

时间:2011-07-02 08:01:17

标签: c# ssms sql-server-2008

我有一个C#控制台应用程序,其代码如下:

using (var cn = new SqlConnection())
{
    cn.ConnectionString = "Data Source=localhost;Integrated Security=True;Persist Security Info=False";
    cn.Open();

    System.Console.WriteLine("past open");
}

System.Console.ReadLine();

运行时,我设置了两个断点。一个在WriteLine,另一个在ReadLine。我也打开了Sql Server Management Studio(SSMS),正在观看Activity Monitor的进程列表。

当我运行应用程序并点击我的第一个断点(在WriteLine上)时,我很快就会在SSMS进程列表中看到一个进程,其应用程序名称为“.Net SqlClient Data Provider”,其数据库为“master”。

当我F5到第二个断点时,我的期望是该进程将从进程列表中删除,因为我已经关闭了我的SqlConnection。但是,在应用程序关闭之前,该过程仍保留在列表中。

我的假设是该进程仍然在列表中,因为我的连接并未真正关闭。如果我的假设是准确的,那么我还需要做些什么来关闭连接?如果我的假设不准确,那么为什么我的流程仍然列出,如何测试我的连接是否实际正常关闭?

感谢。

2 个答案:

答案 0 :(得分:8)

据我所知 - 当您使用Close或Dispose方法时 - 您只是将连接返回到连接池以供重用(连接不会真正关闭) - 您可以获得更多信息{{3} }。

答案 1 :(得分:1)

除了DanNsk的回答,如果连接真的关闭并且没有返回到连接池,可能会重用SPID