数据库用户连接过多的问题!!!!

zydchina 2003-10-18 04:32:57
在访问数据时主要使用两种机制,一种是SqlDataReader,调用存储过程,
部分代码如下:
在一个类中封装函数:
public SqlDataReader GetChannel()
{
...
myConnection.Open();
...
dr = myCommand.Ex...();//执行数据库
...

...
return dr;
}

在应用程序中调用此函数:

SqlDataReader recd = MyClass.GetChannels();

myDataGrid.Datasource = recd;
myDataGrid.DataBind();

....

在多次点击网页时,无法刷新网页,说数据库连接过多,??????????????????????????
请各位大虾帮我解决这个问题,分数不是问题!!!!!
...全文
220 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixiang1234 2003-10-18
  • 打赏
  • 举报
回复
我以前也碰到过这种问题,问题出在数据库连接没有关.
guojiwei 2003-10-18
  • 打赏
  • 举报
回复
这种返回是很危险的
还是不要返回SqlDataReader对象好啊可以试试别的吗
Nicholasqpl 2003-10-18
  • 打赏
  • 举报
回复
你在最后有没有close()掉啊?
树猫 2003-10-18
  • 打赏
  • 举报
回复
数据库的操作封装(增 删 改 查)起来,在封装的操作的最后就关闭数据库连接,不要显示的的在 view 层 打开数据库连接和关闭连接,这些应该在封装的操作里就完成
Kinli 2003-10-18
  • 打赏
  • 举报
回复
一定要把数据库关闭.
zydchina 2003-10-18
  • 打赏
  • 举报
回复
我的OS是 XP的
zydchina 2003-10-18
  • 打赏
  • 举报
回复
那我开发的网站,一旦放到服务器上时,还会不会出现同样的问题呢?
skyover 2003-10-18
  • 打赏
  • 举报
回复
403是IIS的问题。如果是2K pro和XP,因为是个人操作系统,IIS只用作开发调试用,所以不允许太多连接,这是没有办法解决的。除非装服务版操作系统。
zydchina 2003-10-18
  • 打赏
  • 举报
回复
请问一下,刚才的错误是IIS的问题吗,如果是的话,怎么解决?
如果不是的话,那又是什么地方的问题呢?

先说谢谢!
skyover 2003-10-18
  • 打赏
  • 举报
回复
2000个人版和xp都会有这种现象。但是你刷新慢一点,多刷二十次,连接池满的错误还是会出来的。
skyover 2003-10-18
  • 打赏
  • 举报
回复
这是403。。汗。错怪了。对不起。
zydchina 2003-10-18
  • 打赏
  • 举报
回复
我的错误是这样的:

无法显示网页
目前访问网站的用户过多。

--------------------------------------------------------------------------------

请尝试执行下列操作:

单击刷新按钮,或稍后重试。

打开 localhost 主页,然后查找与所需信息相关的链接。
HTTP 错误 403.9 - 禁止访问:连接的用户过多
Internet 信息服务

--------------------------------------------------------------------------------

技术信息(用于支持人员)


背景:
导致此错误的原因是:Web 服务器忙,因通信量过大而无法处理您的请求。


详细信息:
Microsoft 支持

skyover 2003-10-18
  • 打赏
  • 举报
回复
也有可能与iis的最大用户连接有关
======================================

IIS的最大连接数错误是403
而数据连接过多是说连接池已满,不是一回事的。
skyover 2003-10-18
  • 打赏
  • 举报
回复
大汗。那是你的数据类没有构建好。如果是这样的类进行操作,当然会使得连接过多。

你应该尽量只在一个页面使用一个连接,然后在unLoad事件里将其Dispose.
而且尽量在用完Reader后就将reader关闭,这样其它的方法才可以使用这个持续的sqlconnection.

Public Overloads Sub Dispose()
if(Not(myConnection is Nothing)) then
myConnection.Dispose()
end if
End Sub

这个简单的方法就应该会好很多。
kandyasp 2003-10-18
  • 打赏
  • 举报
回复
要记得关闭
guoyan19811021 2003-10-18
  • 打赏
  • 举报
回复
也有可能与iis的最大用户连接有关
zydchina 2003-10-18
  • 打赏
  • 举报
回复
那就为你的类写一个dispose方法。将Cn关闭。
你的dr是从数据库类中得到的,也可以即时关闭呀。

dispose方法具体怎么用?

在我的数据库中有好几个 myConnection(即一个方法GetChannel,GetUser,...)有好几个 ,能够使用一个变量吗?????
而且每一个myConnection属于一个方法的局部变量,怎么全局调用???
skyover 2003-10-18
  • 打赏
  • 举报
回复
连接池技术可能是这样的。里面最多驻留十到二十个连接,如果连接池以满,而你又没有通知.Net 回收的话,而且正好.net的垃圾回收时间也还没有到,那么将无法连接DBSERVER。而dispose方法就正是通知.Net的方法。
rgbcn 2003-10-18
  • 打赏
  • 举报
回复
我找到了一编文章  
数据库连接池技术浅析(只不过是java)

http://www.chinajavaworld.net/doc/jdbc/4.html
rgbcn 2003-10-18
  • 打赏
  • 举报
回复
采用一个全局的Connection对象,创建后就不关闭,以后程序一直使用它,这样就不存在每次创建、关闭连接的问题了。但是,同一个连接使用次数过多,将会导致连接的不稳定,进而会导致WEB SERVER的频频重启。故而,这种方法也不可取。实际上,我们可以使用连接池技术来解决上述问题。
加载更多回复(7)

62,041

社区成员

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

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

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

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