运行此代码时,connection.Open()
后,我的数据库连接数增加到3。为什么在connection.Close()
之后它不会回到2?
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。
答案 0 :(得分:4)
SQL Server使用连接池是出于性能原因。这意味着即使通过调用dispose,您的连接也将保持活动状态。
尝试致电: SQLConnection.ClearAllPools();
要清除当前连接,请尝试调用:
SqlConnection.ClearPool(ObjSqlConnection);
答案 1 :(得分:-1)
在关闭之前,您似乎正在处理 - .Dispose
应该是您在将对象变量设置为Nothing
之前对一次性对象所做的最后一件事。
通过在关闭之前处理命令和/或连接,您可以保持连接处于打开状态。
也许您可以为Using
和connection
使用sqlCommand
阻止。