我有一个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多个连接。 如何正确关闭连接?
答案 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对象。