大家都来看看,连接池的问题,谢谢! 小弟做了一个网站,因为访问量挺大的,所以偶尔会出现错误,提示说超出连接池的错误!但是我每次数据源OPEN,都有相对应的CLOSE,还有什么原因呢,所以请教各位帮我分析下原因,怎么解决,谢谢各位! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 连接池使用【在我插向db中插如大量数据是】 错误信息: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池小。 分析: 在调用 conn.Close() 时 与db的连接并没有真正被关闭,而是被传递到连接池中,之后体就在池中重用。 当插入大量数据的时候eg: 几千几万 这样的你打开关闭 就会出现问题。只有真正清除连接就可以避免调。 方法: 调用 conn.Dispose() 就搞定了,^_^ 2.DropDownList使用小问题 错误信息:DropDownList 不能有多个项被选定 【使用:DDL.SelectedValue="XX"】 分析:(起初以为是其它那里写的问题,查了半天当让没有效果了,最后绝望了,csdn search 搞定 ) 方法: 使用 this.DDL.Items.IndexOf(this.DDL.Items.FindByValue("XX")); 这说明你写的CLOSE方法不对,它并没有关闭掉所打开的数据库.最好是重新检查代码,也可以把链接池禁用掉:pooling=false; 试试 我也搞不明白,我也觉得是CLOSE方法不对,那具体要怎么弄呢,请高手指点指点! 使用连接池一般都会做判断 // 打开数据库连接 if (con == null) { con = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); } if(con.State ==System.Data.ConnectionState.Closed) con.Open(); http://blog.csdn.net/sykpboy/archive/2005/06/14/394494.aspx /// <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); } } 如何讓焦點總落在查詢按鈕上 请问如何通过javascript获取iframe? Json转对象 有没有人做过外汇交易平台? 怎样用asp.net实现图片放大镜的效果 用户控件如何向客户端发脚本块? 下周末攻击web站点 大家给点意见 大家用ASP.NET是用什么开发工具的? 大虾帮我 访问权限问题 怎么确保.dll被覆盖的那么时间段访问网站有错? 发现好的网页,能不能利用把网页的代码直接拷到VS环境下ASPX文件的HTML中来重用,这样应该注意什么问题呢?
错误信息:
超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池小。
分析:
在调用 conn.Close() 时 与db的连接并没有真正被关闭,而是被传递到连接池中,之后体就在池中重用。
当插入大量数据的时候eg: 几千几万 这样的你打开关闭 就会出现问题。只有真正清除连接就可以避免调。
方法:
调用 conn.Dispose() 就搞定了,^_^
2.DropDownList使用小问题
错误信息:DropDownList 不能有多个项被选定 【使用:DDL.SelectedValue="XX"】
分析:(起初以为是其它那里写的问题,查了半天当让没有效果了,最后绝望了,csdn search 搞定 )
方法: 使用 this.DDL.Items.IndexOf(this.DDL.Items.FindByValue("XX"));
if (con == null)
{
con = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
}
if(con.State ==System.Data.ConnectionState.Closed)
con.Open();
/// 下面有两种解决方案,一个是检查所有上层程序,查看使用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);
}
}