数据库连接的close()和dispose()这两个方法有什么区别区别啊?
为什么我dispose()后还可以close()啊??dispose()为什么没关闭连接呢?
哪位老大可以解释下吗?

解决方案 »

  1.   

    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();
    }
    垃圾回收器并不会马上回收,概念上是一样的
      

  2.   

    调用Dispose方法并不会释放对象在托管堆中占用的内存,释放对象内存的工作仍由垃圾收集器负责,而且释放的时间仍不确定,Dispose,Close,Finalize都是一样的。原因是他们并不控制托管堆中对象所使用的内存的生存期,也就是说我们执行那些方法后,仍然可以调用对象上的方法。
      

  3.   

    看看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);
    }
      

  4.   

    所以不难看出,Close和Dispose都是用来释放非托管资源。
    而且MSDN中有记载,Close方法是平稳执行的,即就算你调用多次,也不会抛出异常。