.net Timeout expired 出错 (急- -||)

001007009 2010-05-06 05:22:11
由于本人不asp.net不了解.查了一天Timeout expired 这个错误,还是不能得以解决
附上代码:
public YX_sql()
{
con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["YXPath"]);
}
public void Open()
{
con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["YXPath"]);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
}
public void Close()
{
con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["YXPath"]);
if (con.State == ConnectionState.Open)
{
con.Close();
con.Dispose();
}
}
webconfig
<add key="YXPath" value="server=.;Pooling=true;Min Pool Size=200;Max Pool Size=500;packet size=4096;uid=**;pwd=**;Trusted_Connection=no;database=**"/>
...
<httpRuntime useFullyQualifiedRedirectUrl="true" maxRequestLength="5000" executionTimeout="80000"/>
下面是调用的
public SqlDataReader YX_PROCEDURE_DataReader(string strProName, YX_ProceducreParameter[] stProParameters)
{
Open();
.....
Close();
return DR;
}
参考了这篇资料,不是很懂!
<a href="http://blog.csdn.net/hbu_dcf/archive/2010/03/01/5335361.aspx">http://blog.csdn.net/hbu_dcf/archive/2010/03/01/5335361.aspx</a>

求救!!!!!!!!!

...全文
191 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
001007009 2010-05-07
  • 打赏
  • 举报
回复
感谢 楼上所有朋友
Andytuoye 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuyq11 的回复:]
连接没关闭, 消耗资源过多
检查程序
using(sqlconnection conn=new sqlconnection(""))
http://topic.csdn.net/u/20100421/15/c308f282-c2e4-409e-889a-95d08fb43568.html
[/Quote]
仔细检查你的数据访问层,
001007009 2010-05-06
  • 打赏
  • 举报
回复
恩 我注意了的
还是不行。。。
ciznx 2010-05-06
  • 打赏
  • 举报
回复
注意我上面的代码中第一行有一个错误,多写了一个 new
那么这样改了一下之后,你在需要用连接的时候,直接使用 con 变量就可以了,它在当前页面所有域中都有效
然后调用 void Open() 打开连接,使用 void Close() 关闭连接
001007009 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ciznx 的回复:]
现在出了什么错误
[/Quote]
加 我qq 可以么
1076141003
感谢
ciznx 2010-05-06
  • 打赏
  • 举报
回复
现在出了什么错误
001007009 2010-05-06
  • 打赏
  • 举报
回复
依然出错
duxj007 2010-05-06
  • 打赏
  • 举报
回复
hehe,开启数据连接操作完成后就要关闭
ciznx 2010-05-06
  • 打赏
  • 举报
回复
改成这样吧,应该



private SqlConnection con = new new SqlConnection(
System.Configuration.ConfigurationManager.AppSettings["YXPath"]);

public void Open()
{
if (con.State == ConnectionState.Closed)
{
con.Open();
}
}
public void Close()
{
// 下面这行与上一楼中不一样
if (con.State != ConnectionState.Closed)
{
con.Close();
}
}

wuyq11 2010-05-06
  • 打赏
  • 举报
回复
连接没关闭, 消耗资源过多
检查程序
using(sqlconnection conn=new sqlconnection(""))
http://topic.csdn.net/u/20100421/15/c308f282-c2e4-409e-889a-95d08fb43568.html
ciznx 2010-05-06
  • 打赏
  • 举报
回复
你需要把你的业务代码修改成如下的方式:


private SqlConnection con = new new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["YXPath"]);
public void Open()
{
if (con.State == ConnectionState.Closed)
{
con.Open();
}
}
public void Close()
{
if (con.State == ConnectionState.Open)
{
con.Close();
}
}


然后把你的 Web.Config 中 appSettings 节关于数据的配置修改如下:


<appSettings>
<add key="YXPath" value="server=.;Pooling=true;uid=**;pwd=**;Trusted_Connection=no;database=**"/>
</appSettings>
ciznx 2010-05-06
  • 打赏
  • 举报
回复
这样跟你说吧,你的 C# 代码存在一些问题
问题在于你打开链接 Void Open() 和关闭连接 Void Close() 两个过程。

你不能这样写,因为,你每次调用 Open() 时都创建了一个新的连接 A
而你的 Close() 的目的是试图关闭你刚才新建的那个连接 A

可是事实上呢,不是这样的:事实是,当你每次调用 Close() 时你再一次新建了一个连接 B,然后你再关闭它,此时你关闭的是 连接 B,而非你刚才创建的 A。这样你刚才创建在的 A 就一直占用着连接池的资源不能适放——更糟糕的是,你会经常调用 Open(),所以会有很多的这样的连接 A,它们的资源不能被正确地释放,导致你的连接池被占满。

解决方法稍后跟你讲
001007009 2010-05-06
  • 打赏
  • 举报
回复
up!!!!!!!!
001007009 2010-05-06
  • 打赏
  • 举报
回复
up!!!!!!!!
001007009 2010-05-06
  • 打赏
  • 举报
回复
up!!!!!!!
ciznx 2010-05-06
  • 打赏
  • 举报
回复
是啊,我的意思是,无需手动配置这个值,尤其是当你独自一个人在测试的时候,更不需要配置了——如果是因为后期网站发布之后确实存在并发不够才需要更改这个值。
那么你现在的工作是,把这个 Web.Config 中的这句:Min Pool Size=200;Max Pool Size=500; 去掉,再来研究一下你的 .cs 脚本代码中可能存在的问题
001007009 2010-05-06
  • 打赏
  • 举报
回复
up!!!!!!!!
001007009 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ciznx 的回复:]
一般情况,连接池无需手动更改,系统默认的大小基本够用了,除非你在连接数据库后没有正确地关闭连接。

一般把 Pooling 设置成 true 就可以了,能满足并发数千的访问了
[/Quote]

感谢这位师兄
但是我设置了这个的
webconfig
<add key="YXPath" value="server=.;Pooling=true;Min Pool Size=200;Max Pool Size=500;packet size=4096;uid=**;pwd=**;Trusted_Connection=no;database=**"/>
...
<httpRuntime useFullyQualifiedRedirectUrl="true" maxRequestLength="5000" executionTimeout="80000"/>


up!!!!!!!!
ciznx 2010-05-06
  • 打赏
  • 举报
回复
一般情况,连接池无需手动更改,系统默认的大小基本够用了,除非你在连接数据库后没有正确地关闭连接。

一般把 Pooling 设置成 true 就可以了,能满足并发数千的访问了
001007009 2010-05-06
  • 打赏
  • 举报
回复
up!!!!!!!!!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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