2

当我运行此代码时,与我的数据库的连接数在connection.Open(). 为什么它没有回到 2 之后connection.Close()

private static void AdoNetStuff()
{
    var connection = new SqlConnection(@"Initial Catalog=abook;server=.\SqlExpress;Integrated Security=true");
    var sqlCommand = new SqlCommand("SELECT TOP 10 * FROM dbo.Entity", connection);

    connection.Open();

    sqlCommand.ExecuteReader();

    sqlCommand.Dispose();
    connection.Dispose();
    connection.Close();
}

上面的代码在控制台应用程序中,在我的控制台应用程序关闭之前,连接数不会回落到 2。

这就是我检查连接数的方式。

SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections, loginame as LoginName
FROM sys.sysprocesses
WHERE dbid > 0 AND DB_NAME(dbid) = 'abook'
GROUP BY dbid, loginame

我可以在结束控制台应用程序之前等待一段时间,我仍然有 3 个连接。一旦我结束应用程序,连接数就会下降到 2。

4

2 回答 2

5

SQL Server 出于性能原因使用连接池。这意味着即使您调用了 dispose,您的连接仍将保持活跃。

尝试调用: SQLConnection.ClearAllPools();

要仅清除当前连接,请尝试调用:

SqlConnection.ClearPool(ObjSqlConnection);

于 2013-08-07T01:27:49.753 回答
-1

看来您是在关闭之前进行处理 -.Dispose应该是在将对象变量设置为Nothing.

通过在关闭命令和/或连接之前处理它,您可以使连接保持打开状态。

也许你可以为你的and使用一个Using块。connectionsqlCommand

于 2013-08-07T01:26:19.390 回答