A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一个数据库连接对象conn,conn.close()和conn.dispose()的区别是什么?

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

12 个回复

倒序浏览
conn.close()是关闭数据库连接,conn.dispose()是释放数据库所占用的内存。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
conn.close()是关闭数据库连接的,关闭连接后还能再次连接,conn.dispose()是释放数据库所占的内存,不能重新连接数据库

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
Close 用来关闭 SQLConnection 对象打开的数据库连接,之后还可以 Open 之前的或另一个数据库连接,此时 SQLConnection 对象是实例,仍然占用着分配给它的资源
Displose 用来销毁对象,之后 SQLConnection 对象就没有了,成了 null,不可引用,所有分配给它的资源都被释放

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
使用Close方法关闭链接之后还是可以再次打开链接的,而使用Dispose方法来进行释放的话就不能再次打开链接了哦。。。。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
conn.close() 是关闭数据库连接,实际上是把连接放回ado.net的连接池,并没有真正关闭,所以再次连接时只是把连接从池中拿出来用,速度很快.      
conn.dispose() 是销毁连接,彻底关闭.

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
毕山山 黑马帝 2011-11-16 17:00:28
7#
本帖最后由 毕山山 于 2011-11-16 17:01 编辑

在dispose()中,除了执行close()之外,还要查找SQLConnection所在的容器并移除其连接,并且要向其他引用此对象的对象发送事件。而一个   close()仅仅是关闭数据库连接,没有那么多额外的动作。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
王绚文 黑马帝 2011-11-21 09:26:11
8#
本帖最后由 王绚文 于 2011-11-21 09:26 编辑

dispose后数据库连接将不能再open
close后 数据库连接还可以继续iopen

-------------------
要看你数据库服务器的性能

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
杨楠 金牌黑马 2011-11-20 13:13:59
9#
偶忽然想问一下,如果不dispose,系统会在大约多少次数据库连接后瘫痪。。。
回复 使用道具 举报
conn.dispose通过反编译器事实上里面已经进过了一次conn.close,但是它添加了一个功能是释放这个sql操作占用的内存资源

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
经睿 黑马帝 2011-11-22 10:48:56
11#
close()是关水龙头,dispose()是撤水管儿
关了水龙头还可以开,撤了水管儿就open()不了了哦{:soso_e113:}
回复 使用道具 举报
许前刚 黑马帝 2011-11-22 13:20:48
12#
通俗一点,conn就好比两个城市间的一条公路,conn.close();是要关闭这条公路,不允许通车了,但以后还可以在开放,也就是还可以conn.Open();但conn.Dispose();则是把这条公路都给毁了,想再Open也不行了,除非重新建立conn的链接!
回复 使用道具 举报
Luck_c 黑马帝 2011-11-22 15:21:25
13#
回8楼  如果你一直open()数据库不关闭 ,在你第二次试图open()的时候会抛出异常。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马