小弟做了一个网站,因为访问量挺大的,所以偶尔会出现错误,提示说超出连接池的错误!但是我每次数据源OPEN,都有相对应的CLOSE,还有什么原因呢,所以请教各位帮我分析下原因,怎么解决,谢谢各位!

解决方案 »

  1.   

    连接池使用【在我插向db中插如大量数据是】 
      错误信息: 
            超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池小。   
    分析:  
            在调用 conn.Close() 时 与db的连接并没有真正被关闭,而是被传递到连接池中,之后体就在池中重用。 
            当插入大量数据的时候eg: 几千几万 这样的你打开关闭 就会出现问题。只有真正清除连接就可以避免调。  
     方法:   
          调用 conn.Dispose() 就搞定了,^_^ 
    2.DropDownList使用小问题 
       错误信息:DropDownList 不能有多个项被选定 【使用:DDL.SelectedValue="XX"】 
       分析:(起初以为是其它那里写的问题,查了半天当让没有效果了,最后绝望了,csdn search 搞定 ) 
       方法: 使用 this.DDL.Items.IndexOf(this.DDL.Items.FindByValue("XX"));
      

  2.   

    这说明你写的CLOSE方法不对,它并没有关闭掉所打开的数据库.最好是重新检查代码,也可以把链接池禁用掉:pooling=false; 试试
      

  3.   

    我也搞不明白,我也觉得是CLOSE方法不对,那具体要怎么弄呢,请高手指点指点!
      

  4.   

    使用连接池一般都会做判断 // 打开数据库连接
    if (con == null) 
    {
    con = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
    }
    if(con.State ==System.Data.ConnectionState.Closed)
    con.Open();
      

  5.   

    http://blog.csdn.net/sykpboy/archive/2005/06/14/394494.aspx
      

  6.   

    /// <summary>
    /// 下面有两种解决方案,一个是检查所有上层程序,查看使用datareader的地方是否关闭,另一个是编写回收连接的类,解决反复创建连接的问题。
    /// 我建议使用第一种方法,但是由于系统比较复杂,架构并不是太合理,检查起来比较困难,在纠正了几处明显错误后,还是没有根本解决问题,加上release时间要求,
    /// 就采用了第2个方案.
    /// </summary>
    public abstract class AbstractDispose : IDisposable 
    {
    /// <summary>
    /// 
    /// </summary>
    public AbstractDispose()
    {
    //
    // TODO: Add constructor logic here
    //
    } /// <summary>
    /// 
    /// </summary>
    public void Dispose()
    {
    GC.Collect();
    //GC.SuppressFinalize(this);
    }
      
    }