关于连接的close和dispose的区别

stardqs 2005-12-01 11:40:02
数据库连接的close()和dispose()这两个方法有什么区别区别啊?
为什么我dispose()后还可以close()啊??dispose()为什么没关闭连接呢?
哪位老大可以解释下吗?
...全文
278 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hainang1234 2005-12-02
  • 打赏
  • 举报
回复
所以不难看出,Close和Dispose都是用来释放非托管资源。
而且MSDN中有记载,Close方法是平稳执行的,即就算你调用多次,也不会抛出异常。
hainang1234 2005-12-02
  • 打赏
  • 举报
回复
看看SqlConnection的Dispose源码吧:
//SqlConnection
protected override void Dispose(bool disposing)
{
if (disposing)
{
switch (this._objectState)
{
case ConnectionState.Open:
{
this.Close();
break;
}
}
this._constr = null;
}
base.Dispose(disposing);
}

/*你是调用的Dispose();当然不是Dispose(bool);你调用的是基类Component.Dispose();*/

//Component
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
mark44404 2005-12-02
  • 打赏
  • 举报
回复
调用Dispose方法并不会释放对象在托管堆中占用的内存,释放对象内存的工作仍由垃圾收集器负责,而且释放的时间仍不确定,Dispose,Close,Finalize都是一样的。原因是他们并不控制托管堆中对象所使用的内存的生存期,也就是说我们执行那些方法后,仍然可以调用对象上的方法。
spiderman111 2005-12-01
  • 打赏
  • 举报
回复
public void SqlConnectionHereAndGone()
{
SqlConnection myConnection = new
SqlConnection("Initial Catalog=Northwind;Data Source=localhost;Integrated Security=SSPI;");
myConnection.Open();
//Calling Dispose also calls SqlConnection.Close.
myConnection.Dispose();
}
垃圾回收器并不会马上回收,概念上是一样的

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧