.net OnClick事件中写数据库连接,如事件:
 protected void EDIT_Click(object sender, EventArgs e)
    { string sql2 = "select zt FROM wt_xs_htpsb WHERE  hth ='111'";
        string zt = "";
        DataSet ds = new DataSet();
        DBConnect db = new DBConnect(Session["strConn"].ToString());
        db.DefineRecordSet(sql2);
        while (db.rs.Read())
        {
            zt = db.rs["zt"].ToString();
        }
        db.rs.Close();
        db.closeConn();
        if (zt != "true")
        {
            MsgBox("合同已经开始执行,不能修改!");
        }
        else {
            //Response.Write("<script language='javascript'>window.open('ind.asp');</script>");  
            //Response.Redirect("wt_xs_htpsb_edit.aspx?hth=" + edit_ht, true);
          Response.Redirect("Default.aspx");
        }
         mxb.DataBind();为什么会增加连接池的连接数量.
按钮点一次,用“USE wutong EXEC sp_who 'sa'”在sql server中发现连接多一个?为什么,怎么才能不增加?

解决方案 »

  1.   

    关键要看你的DBConnect内部如何写的,如果那个类的内部没有释放连接,自然就会增加连接池数量。虽然我有看到你调用关闭连接的方法,但是方法内如何执行的我没看到。
      

  2.   

     db.closeConn(); 方法内容如下
    public void closeConn()
            {
                try
                {
                    if ((this.rs != null) && !this.rs.IsClosed)
                    {
                        this.rs.Close();
                        this.rs.Dispose();
                    }
                    if ((this._conn != null) && (this._conn.State == ConnectionState.Open))
                    {
                        this._conn.Close();
                    }
                    this._conn = null;
                    this.rs = null;
                    if (this.dt != null)
                    {
                        this.dt.Clear();
                        this.dt.Columns.Clear();
                        this.dt.Dispose();
                    }
                }
                catch (Exception)
                {
                }
            }
      

  3.   

    光有this._conn.Close()还不行,你还要this._conn.Dispose(),当调用Dispose()方法后,该连接就进入连接池缓存,以供下次new一个新连接时调用。
      

  4.   

    大家看看closeConn() 里面有问题没有,我用SqlConnection,SqlCommand方法直接连接,然后用Close();就不增加新的连接。
      

  5.   

    如果直接close可以,最好检查一下this._conn.State的状态看看
      

  6.   

    加Dispose,实在不行就用单一模式
      

  7.   

    Close()或者Dispose()有一个就行,不必全部写的。
      

  8.   

    db.rs.Close(); 
    db.closeConn(); 这不是关闭么?
      

  9.   

    为什么会增加连接池的连接数量. 
    按钮点一次,用“USE wutong EXEC sp_who 'sa'”在sql server中发现连接多一个?为什么,怎么才能不增加?
    ===================================================================
    方法执行完之后你的代码在正常情况下是关闭了数据库链接的(在.NET层面是可以这么理解的,但是物理连接是无法直接管理的,因为在.NET中提供了连接池),也就是你用代码close()了Connection,未必就关闭掉了数据库物理连接。连接池能在程度上提高数据库访问性能。本文讨论到底何为连接池,它如何提高数据库访问性能,以及如何在.NET中创建连接池并增加或移除连接。 导言       连接数据库是应用程序中耗费大量资源且相对较慢的操作,但它们又是至关紧要的。连接池是已打开的及可重用的数据库连接的一个容器。连接池在所有的数据库连接都关闭时才从内存中释放。使用连接池最基本的好处是提高应用程序的性能及可伸缩性,而其主要缺点是会有一个或多个数据库连接将一直保持打开状态,即使当前不在使用。ADO.NET的Data Providers将默认情况下将使用连接池,如果你不想使用连接池,必须在连接字符串中指定”Polling=false”。连接池中为你提供了空闲的打开的可重用的数据库连接,而不再需要每次在请求数据库数据时新打开一个数据库连接。当数据库连接关闭或释放时,将返回到连接池中保持空闲状态直到新的连接请求到来。如果我们有效地使用连接池,打开和关闭数据库将不再很耗费资源。本文讨论连接池的相关内容以及如何有效的使用连接池来提高应用程序的效率及可伸缩性。 连接池如何工作       连接池中包含打开的可重用的数据库连接。在同一时刻同一应用程序域中可以有多个连接池,但连接池不可以跨应用程序域共享。注意:一个连接池是通过一个唯一的连接字符串来创建。连接池是根据第一次请求数据库连接的连接字符串来创建的,当另外一个不同的连接字符串请求数据库连接时,将创建另一个连接池。因此一个连接字符中对应一个连接池而不是一个数据库对应一个连接池。如以下代码所示代码1// 新建一个连接池SqlConnection sqlConnection = new SqlConnection();sqlConnection.ConnectionString = "Server=localhost;Database=test;User ID=joydip;Password=joydip;Trusted_Connection=False";sqlConnection.Open();      代码2// 因为连接字符串不同,新建另一个连接池SqlConnection conn = new SqlConnection();sqlConnection.ConnectionString = "Server=localhost;Database=test;User ID=test;Password=test;Trusted_Connection=False";sqlConnection.Open();   代码3