积极答复者
高手请进:程序已经关闭,sqlserver数据库活动连接不自动释放

问题
-
最近数据库出现点问题:程序(多线程应用访问数据库)运行一段时候后,就无法读取数据库数据了(程序中的所有连接池连接都做了代码显示关闭),但是关闭程序后,数据库当前用户的活动连接仍然存在,why?是不是获得不了数据库连接了呢?
测试环境:win2003server+sqlserver2005
问题:程序关闭后,从数据库的管理工具“活动检测器”中仍然看到程序用户的活动连接存在,sleeping状态,若程序开启或关闭多次(一个程序和数据库有5个连接,关后启动,10次后,连接就到达50个),以前的数据库使用中没发现这样的问题,一般都是程序关闭,数据库自动断开连接(活动连接也就不存在了,其他数据库系统测试结果也是:程序关闭,数据库自动断开连接)。
现在一般解决办法:
1.重新安装数据库多次,仍没见解决
2.当数据库服务重启后,连接就自动关闭(不可取,严重影响业务正常运行)
注:软件程序没有问题,在多台数据库系统商用,最近实施工程师,在这台机器上部署发生上面的问题
注2:数据库系统的其他功能全部正常,唯独活动连接不释放
请帮忙解决这个问题?是数据库系统的问题(没见其他功能异常)吗?还是操作系统的问题(OS也没见任何异常)?
答案
-
你好,
执行SqlConnection.Close()并不关闭数据库连接, 而是把连接放回连接池。你可以使用SqlConnection.ClearPool() 或者 SqlConnection.ClearAllPool() 方法清除连接池。或者,在连接字符串中把pooling设置为false 关闭连接池。
更多信息,请参阅:http://msdn.microsoft.com/zh-cn/library/8xx3tyca(v=VS.80).aspx。
Best Regards,
Stephanie Lv
- 已标记为答案 WeiLin QiaoModerator 2011年5月20日 9:58
全部回复
-
你好,
执行SqlConnection.Close()并不关闭数据库连接, 而是把连接放回连接池。你可以使用SqlConnection.ClearPool() 或者 SqlConnection.ClearAllPool() 方法清除连接池。或者,在连接字符串中把pooling设置为false 关闭连接池。
更多信息,请参阅:http://msdn.microsoft.com/zh-cn/library/8xx3tyca(v=VS.80).aspx。
Best Regards,
Stephanie Lv
- 已标记为答案 WeiLin QiaoModerator 2011年5月20日 9:58