2011-03-09 40 views
1

在我的Web服务中,我连接到Sybase数据库。大量打开数据库连接导致应用程序崩溃

我有医生的名单和每个医生可以与医院的数量有关。我需要更新医生正在工作的每个医院的一些细节。

对于每一个医生数据库的新连接是opened.For每个医生在列表中,我第一次得到在DbReader医院的名单,我在做阅读器上的每个医院的操作。一旦处理了DbReader中的所有记录,就关闭阅读器和连接。 (这是因为我通过System.Data.CommandBehavior.CloseConnectionSybase.Data.AseClient.AseCommand类的ExecuteReader()方法)

现在,如果医生的数量超出某个上限,我得到的错误,因为这是打开的连接的数量变得非常大。

我可以在这种情况下使用哪些不同的方法来摆脱错误的?如何知道客户端打开连接的数量?

其中一个事情我能做的就是 - 直到前一个连接关闭不打开一个新的连接。但是这种方法并不好(我认为),因为虽然允许多个连接,但我一次只能有一个连接。

+1

你应该表现出你的代码,你在哪里循环对所有的医生和您如何使用您的ExecuteReader的地方。 – 2011-03-09 11:26:21

+0

@David Piras:代码非常大,分布在多个方法中。我有一个方法返回包含医院列表/记录的Reader对象。我从其他方法调用此方法。当我得到Reader对象并且它有记录时,我处理每条记录,并在'finally'块中关闭阅读器(这反过来关闭连接)。 – Learner 2011-03-09 11:33:47

回答

3

为什么不使用连接池?或者实现一个单身连接管理器,只要没有达到限制就提供新的连接。

而且你确定你需要Multiconnection在这种情况下?这听起来像你必须为每个医生运行相同的过程。所以你可以在一个循环中完成,猜测一个连接就足够了。

+0

单连接不会执行,因为客户端代码是Web服务,有很多web方法会调用这段代码。 – Learner 2011-03-09 11:39:54

+1

因为在一个Web服务调用中打开了连接,即,线程不可用于其他Web服务调用(不同的线程),所以从这个观点来看,多重连接并不能帮助您。您应该打开一个连接,工作,然后关闭它。 – Sisyphus 2011-03-09 11:52:10

+0

@Sisyphus:你和@ O.D是对的。我不需要多个连接。我做了更改以使用单个连接,并解决了我的问题。 – Learner 2011-03-10 09:24:34