检查是否存在打开的连接到数据库asp.net/c#

5
每次我的应用程序运行存储过程时,它会执行以下操作:

using (DbBase conn = new DbBase())
{      
    //call sproc
}

DBBase()函数打开与LINQ DataContext的连接。

我想知道是否有一种方法可以知道连接是否已经打开,并使用已经打开的连接而不是打开新的连接。该验证应在以下DbBase()构造函数内完成:

ClientDB = new ClientDBDataContext([ConnectionString from web.config]);

谢谢你

5个回答

5

1
我希望答案提到,使用()并不会真正关闭连接,而只是将其释放回到 ADO.Net 连接池中以便重用... - Charles Bretana
@Charles - Close方法是在DbConnection对象的Dispose()期间特别调用的。 ADO.Net将维护池信息,但就客户端而言,连接已关闭,这是一件好事。 - womp

2
使用using的好处在于,这是您无需担心的类型。

我删除了这个回复,因为我认为它无法解决原帖作者在主题方面的知识缺乏问题。仅仅说“别担心,使用 using 就能解决所有问题……”并不能回答问题或填补原帖作者关于 ADO.Net 连接池的核心问题理解方面的空白。 - Charles Bretana
1
@cb:Womp的回答是最好的,我点赞表示认同。如果我看到了他的回答,我就不会发表我的草率回答了。 - Nick
我已经更改了正确答案,不用担心。我确实知道关于池化的内容,你的回答在我所知道的范围内是足够的,但我必须承认womp的回答更加完整。谢谢。 - Eduardo Mello
@Nick,由于您的慷慨回应,我已经删除了我的DV。@Eduardo,我仍然认为池化行为(不使用语句)是你问题实质的关键问题(至少是你提问的方式),但这当然是有争议的... - Charles Bretana

2

如果使用连接池(默认情况下,除非您已明确执行某些操作以关闭它),这不是问题。让连接池代码处理此问题。然后关闭连接实际上只是将其释放回池中以供重用。仅当池中没有连接可用时,才会为您创建(并打开)一个新连接。很好,您正在使用using语句。这确保连接将在此代码段完成后被释放回池中以供重用(而不是关闭)。


1

我觉得你不用太担心这个问题(除非你已经对其进行了分析)。使用连接池,打开一个新连接的成本非常低。如果确实存在问题,那么你可能需要考虑更改连接池中的连接数(http://www.15seconds.com/issue/040830.htm)。


谢谢您的快速回复。我同意关于连接池的观点,但我想知道是否有其他方法。 - Eduardo Mello

1

我不知道DBase,但至少Sql Server提供程序已经为您执行此操作。它在后台使用连接池来尽可能重用现有连接。


DbBase是我创建的一个类,用于管理项目中的数据上下文。谢谢。 - Eduardo Mello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接