2 zhaohechao zhaohechao 于 2016.02.29 16:53 提问

C# 如何释放连接池的连接

我们知道.net的数据库连接默认是使用连接池的,这样做有很多好处。但是对于CS结构的应用程序,会消耗很多数据库连接。因此我在oracle数据库端设置了,IDL TIME 空闲时间,即超过一定时间没有操作就关闭连接,但是.net客户端却不能释放连接,所以当Oracle端释放连接后,客户端再执行sql就会报异常。如何做才能释放连接池中的连接呢?

2个回答

caozhy
caozhy   Ds   Rxr 2016.02.29 16:55

只能说你的oracle的数据库的驱动有问题,或者有别的问题。.net的连接池当然也是自动管理,不需要释放的。只要调用connection.close()或者dispose()就可以了。

DuckchanX
DuckchanX 明明只有半桶水,这么有自信,真是难得
一年多之前 回复
zhaohechao
zhaohechao   2016.03.01 08:16

谢谢你的回答。但是问题就出现在这个自动管理上,当我们调用connection 的Close时,连接并没有真正的释放,而是由.net回收到了回收池。当再new一个connection时,只是取出原来的连接,但是当oracle主动关闭连接,或者网络中断,连接池中连接并不能主动释放,而是抛出异常。我想做的是,当连接池中的连接空闲一定时间后,主动释放,我不了解.net连接池的释放机制,当然我还了解到Connection有一个静态方法ClearAllPools可以清理连接池,不过这样要做大量的工作。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于对sqlserver进行大量数据操作,连接池满的问题--转载
在程序中对数据库增加内容,小批的数据完成可以实现。但是大量数据就会提示连接池已满。检查了程序,发现是循环中插入数据太多,导致打开了过的的sqlconnection 虽然都关闭了但是还是会提示连接池满。 asp.net 连接池 数据库链接是一种危险的、昂贵的、有限的资源,特别是在多层Web应用程序中。你必须正确管理你的链接,因为你的方法将极大的影响应用程序的整体升
配置连接池中空闲连接过期超时释放
有时候,客户的数据库不是独占的,可能几个系统共用。 优雅一点儿:把数据库允许连接数扩大到几个系统的连接数总和,再让每个系统把空闲的连接释放出来。   value="jdbc:mysql://ip:port/db?characterEncoding=UTF8"> is"value="30000" /> 或者 destroy-
httpclient连接池释放异常和多余资源
请求、异常链接监控代码如下: import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client
mysql连接池, 连接的释放, 连接的回收, 连接释放机制
#!/bin/python from sqlalchemy.pool import QueuePool import threading import MySQLdb import time def creator(): c = MySQLdb.connect(host="192.168.41.76", db="test", user="root", passwd="root", po
dispose()与close()的区别 及pooling连接池相关
Dispose了,就必须再Create一次 而Close()后,还可以再Open(), 而Dispose后,对象都不存在了,就不能Open()了 Dispose是对于对象自身而言的,Close是对于连接数据库而言的 其它都是误导... 以下是相关知识点: 1.SqlConnection conn = new SqlConnection(strConnection)时,如果原来的连接已
hibernate 数据库及时释放连接池
在hibernate配置文件中添加 after_transaction org.hibernate.hql.classic.ClassicQueryTranslatorFactory
使用C3P0连接池释放当前连接
程序里用到C3P0连接池,用如下方法获取一个链接: _ds = new ComboPooledDataSource(); ... Connection conn = _ds.getConnection(); 而在释放链接的时候,我们一般是这样写的: conn.close();       今天我突然感觉,如果这样释放连接,conn这个链接应该就完全关闭了,而
c3p0连接池使用完毕后连接返还
c3p0连接池啊就不多说了。有一个问题吧就是连接使用完毕后要怎么放回连接池,供下次继续使用。 答案是: conn.close();// 放回 可以将连接放回。但在实际应用中有时候发现调用这个方法以后连接还是在使用中,没有被返还。 于是各种百度、google。 发现获取连接有两种方法。 第一种是 ComboPooledDataSource cpds = new ComboPoo...
mysql连接池爆满,释放程序长连接僵尸进程
程序启动报错提示连接池爆满不可用的情况下,我们从数据库入手查看哪些进程长时间等待 进入mysql命令界面输入:show processlist 下面我们查找linux系统上mysql所在服务器的位置which mysql,使用which命令前提是你的 cat /etc/profile你的系统环境变量文件内配置了检索的目录,如果安装目录没有配置在profile文件内是查询不到安装目录
Spring c3p0连接池无法释放解决方案
解决c3p0连接池释放的问题。错误信息: Data source rejected establishment of connection, message from server: “Too many connections” ,以及 No Hibernate Session bound to thread .