关闭连接和SQL Server DB的连接数

时间:2015-06-09 09:59:52

标签: c#

我有一个ASP.net应用程序,我在其中查询SQL Server数据库。查询结束后,我执行以下操作:

reader.Close();
reader.Dispose();
conn.Close();
conn.Dispose();

当我继续使用SQL Server并且执行:

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NoOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame

我可以看到'NoOfConnections'在我关闭连接时不断增加,并且有一段时间我会收到错误,因为我已经打开了100多个连接。 如何正确关闭连接

2 个答案:

答案 0 :(得分:5)

SQL Server连接池将缓存连接。您可以使用以下方法清除所有连接池:

conn.ClearAllPools();

有关详细信息,请参阅here

要清除特定连接的连接池,可以使用ClearPool方法。例如:

conn.ClearPool();

有关详细信息,请参阅here

您可以通过连接字符串配置连接池的大小,例如:

Provider=SQLOLEDB;Data Source=ServerName;Integrated Security=SSPI;Min Pool Size=5; Max Pool Size=20;

您也可以关闭连接字符串中的池,例如:

Provider=SQLOLEDB;Data Source=ServerName;Integrated Security=SSPI;Pooling=false;

默认情况下,连接池处于启用状态,连接池的默认大小为100.如果客户端连接字符串相同,则池将尝试使用连接池中的连接(如果可用)。有关详情,请参阅here

答案 1 :(得分:2)

而不是这样做

reader.Close();
reader.Dispose();
conn.Close();
conn.Dispose();

为什么不使用using语句?示例,用于连接:

using (var conn = new SqlConnection("YourConnectionString"))
{
    //your code here
}

这将关闭并处理SqlConnection对象。