【问题标题】:Why does my SqlConnection remain in the SSMS Processes list after closing it?为什么我的 SqlConnection 关闭后仍保留在 SSMS 进程列表中?
【发布时间】:2011-09-27 04:52:36
【问题描述】:

我有一个带有以下代码的 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),并正在查看活动监视器的进程列表。

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

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

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

谢谢。

【问题讨论】:

    标签: c# ssms sql-server-2008


    【解决方案1】:

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

    【讨论】:

    • 感谢 DanNsk。顺便说一句,MSDN 页面说,池化程序会在“长时间”空闲后从池中删除一个连接。不知道有没有办法控制空闲超时?
    【解决方案2】:

    除了DanNsk的回答之外,如果连接真的关闭并且没有返回连接池,则可能是SPID正在被重用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多